Coastguard speedboats picked up 105 migrants in the Mediterranean overnight, seven of whom were already dead, from a converted fishing boat battered by high winds and waves that hit eight metres (26 feet), said coastguard spokesman Filippo Marini.
Due to the bad weather, it was after midday on Monday when the rescue boats made it to the island of Lampedusa, located south of Sicily and close to Libya, the migrants' setting out point.
By then another 22 people had died, raising the death toll to 29, a medical source said. Some of the migrants, who were mostly from sub-Saharan Africa, were then airlifted to better equipped hospitals in Sicily.
More than 3,200 people have died in the last year attempting to reach Italy by boat from North Africa. Over 170,000 people, a record number, landed there in 2014.
Italy has ended its Mare Nostrum rescue programme, which cost Italian tax payers €9 million (over $10 million) per month, and replaced it with a cheaper effort dubbed "Triton."
"Horror off of Lampedusa. These people didn't die in a shipwreck, but from cold. These are the consequences of the end of Mare Nostrum," Laura Boldrini, an Italian politician, wrote on Twitter.
Most of the migrants are fleeing conflict and repression in the Middle East and east Africa and make their way overland to Libya to board boats operated by people smugglers.
Recently the smugglers have begun using bigger boats which can withstand winter storms and make longer journeys, notably from Turkey or Syria.
But the people who died on Monday were travelling on a small boat which would have offered little protection from the elements.