Deepak Behera (58 not out) also chipped in with an important half-century.
While Niranjan scored a patient 363-ball 131 studded with 14 boundaries, Sahoo remained unbeaten on 114 that came off 218 deliveries, including 10 fours and two sixes.
The day also saw Niranjan putting on a solid 100-run stand for the sixth wicket with Sahoo, who then joined hands with Deepak to share an unbeaten 111 runs partnership for the seventh wicket.
Niranjan went on to complete his century, while Sahoo and Deepak take the visitors to a comfortable position.
For Vidarbha, Amol Jungade was the pick of the bowlers with figures of four for 56.
In reply to Odisha's 453, the hosts got off to a poor start, losing opener Amol Ubarhande (0) and one-down batsman Azhar Sheikh (4) for just 14 runs on the board.
At close of play, Faiz Fazal was batting on 10.
Odisha 1st innings: 453 for six declared (Niranjan Behera 131, Subhrajit Sahoo not out 114, Deepak Behera not out 58; Amol Jungade 4/56).
Vidarbha 1st innings: 14 for two in 4 overs (Faiz Fazal batting 10; Basant Mohanty 1/05).
