The accident happened yesterday in Granges-pres-Marnand shortly before 7:00 pm (2230 IST), according to regional police.
An AFP reporter who arrived at the scene saw the wreckage of the train near the small station on the edge of the village of some 1,200 people.
The force of the impact was clear from the mangled engines of the trains, which were wrapped together.
One train had been bound for Lausanne, some 38 kilometres to the south, while the other was travelling north from the same city, officials said.
More From This Section
Frantic efforts continued into early today to free one of the drivers, with whom there had been no contact since the crash.
But by 1:30 am (local time) they had managed to extract his body from the cockpit of his train, using special equipment to cut through the wreckage.
Rescue teams deployed a heavy-lifting crane to remove the rest of the wreckage and clear the line, working under arc-lights set up to enable the operations to continue through the night.
Yesterday's collision on what is one of the most popular and safest rail networks in Europe was the latest in a series of rail accidents on the continent.
Rescue workers, including medics and firefighters, had rushed to the scene from across the Broye region which includes Granges-pres-Marnand, as well as from neighbouring cities.
A helicopter was scrambled by Switzerland's airborne REGA rescue service, known abroad for saving lives in the Alps.
The helicopter and ambulances rushed the five seriously injured to a hospital in the nearby town of Payerne and south Lausanne.
Their injuries were not life-threatening however, police said.