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, Kiwis had reduced the deficit to 166 runs, with Williamson unbeaten on 65 and Latham also well set on 56 when rain washed out the play after tea on the second day.
Santner, Boult lead Kiwis fightback against India
The Black Caps skipper 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 grill 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.
India’s Sharma out of first Test against New Zealand
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.
COMMENTS
Comments are moderated and generally will be posted if they are on-topic and not abusive.
For more information, please see our Comments FAQ