The two trains were on a single-track line at the time of the crash, between the coastal towns of Bari and Barletta.
Emergency services are trying to free passengers from the wrecked carriages near the town of Andria.
“I think there are many dead,” local fire brigade commander Riccardo Zingaro told Rai TV.
Some of the carriages were badly damaged, he said. There were fears the number of deaths could rise further.
One of those rescued from the wreckage was a small child who was airlifted to hospital.
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 Apulia.
Italian reports said one of the trains had come from Andria, and the other from Corato, a short distance to the south-east.
Both trains had four carriages and images from the fire service showed wreckage strewn across a large area. Rescuers set up a field hospital at the scene to help care for the large number of wounded passengers.
Prime Minister Matteo Renzi interrupted a trip to Milan after the crash and returned to Rome.
The line is managed by Ferrotramviaria. Thousands of people use the line to the north of Bari daily on around 200 trains every day. Work is under way to make it a double-track line.