The visitors lost opener Martin Guptill earlier in the day but Williamson and Latham’s unbeaten 117-run stand helped them make major inroads into India’s first innings total of 318.
At stumps, New Zealand had reduced the deficit to 166 runs, with Williamson unbeaten on 65 and Latham also well set on 56 when rain stopped play after tea to wash out the final session of play.
Williamson survived a scare when a Ravichandran Ashwin ball hit the back of his helmet. The back flaps which provide extra support to the skull fell onto his stumps, but didn’t dislodge the bails.
Latham also rode his luck after Ravindra Jadeja got the left-handed batsman caught at short leg, but replays showed the ball hitting the helmet grille of fielder Lokesh Rahul.
The decision was referred to the third umpire who gave Latham not out as according to the rules, external protective gear cannot come into play while taking a catch.
The duo got to their respective fifties soon after, although off-spinner Ashwin and left-arm spinner Jadeja continued to trouble the batsmen.
India’s Umesh Yadav remained the only wicket-taker after he trapped Guptill lbw for 21 in the first session of play.
Guptill started with positive intent as he struck three boundaries in his 31-ball stay before being undone by Yadav’s pacy, in-swinging delivery.
Earlier overnight batsman Jadeja played a useful 42-run cameo for the hosts, who started the day on 291 for nine.
Jadeja struck seven fours and a six during his unbeaten knock as he entertained the crowd at Kanpur’s Green Park.
Medium-pacer Neil Wagner got Yadav caught behind for nine to end up with two wickets in the innings. Mitchell Santner and Trent Boult claimed three apiece.