Two trains were on a single-track line at the time of the crash, between the coastal towns of Bari and Barletta.
The emergency services have been trying to free passengers from the shattered carriages, near the town of Andria.
One of those pulled from the wreckage was a small child, who was airlifted to hospital.
The local authorities have appealed for blood donors to come forward.
It was unclear what led to the collision, which happened in good weather at 11:30 local time (09:30 GMT) in the southern region of Puglia.
A local prosecutor in nearby Trani said it was too early to speculate on the cause, although human error was likely to have been a factor.
Italian reports said one of the trains had come from Andria, and the other from Corato, a short distance to the south-east. Both were travelling at high speed.
‘Worst scene of my life’
Both trains had four carriages and images from the fire service showed wreckage strewn across a large area. Some of the carriages were so badly damaged there was little left but debris.
Corato Mayor Massimo Mazzilli said the damage was so extensive it was as if a plane had crashed.
“I saw dead people, others who were begging for help, people crying. The worst scene of my life,” one policeman told journalists.
Rescuers set up a field hospital at the scene to help care for the large number of wounded passengers.
“The situation is dramatic,” Antonio Nunziante, from the local civil defence, told Ansa news agency.
In total, about 200 were involved in the rescue operation, working in temperatures up to 40C (104F).
Prime Minister Matteo Renzi interrupted a trip to Milan and returned to Rome, after ordering an investigation into the crash.
“I want to express my condolences to the families and I have ordered, with no holding-back, [an inquiry] to find who is responsible,” he said.
“I think we must have absolute clarity on this. We will not stop until we understand what happened.”
Transport Minister Graziano Delrio was at the scene with ministry inspectors and local prosecutors to survey the wreckage.
The line, managed by Ferrotramviaria, is used by thousands of people daily on about 200 trains. Work is under way to make it a double-track line.
Italy’s deadly train accidents
June 2009: Freight train carrying liquefied petroleum gas derails in Viareggio, causing a large explosion. More than 30 people die
January 2005: A head-on collision between a passenger and a freight train near Crevalcore kills 17
July 2002: A passenger train derails in Rometta Messina, killing eight people
April 1978: Two trains collide near a ravine next to Murazze Vado. Some of the carriages fall into the gorge, killing 42