The crash in Ottawa occurred at the peak of morning rush hour.
It was Canada's worst train accident since an oil train derailed and exploded in a Quebec town in July, killing dozens of people.
A number of bus passengers were injured, Ottawa Fire spokesman Mark Messier told CP24 television. Via Rail posted a message on Twitter saying there were no reports of major injuries to train passengers or crew. The locomotive and one passenger car derailed.
Tanner Trepaniere, who was on board the bus, said passengers could see the train bearing down on them as the bus approached the crossing.
"People started screaming, 'Stop, stop!' because they could see the train coming down the track," said Trepaniere, who was sitting in the upper level.
Witnesses said the bus plowed directly into the side of the passing, four-car train.
Pascal Lolgis, who witnessed the crash, said the bus appeared to drive through a lowered crossing barrier.
"Boom! It went into the train like that," Lolgis said. "''He just didn't stop."
Another witness, Mark Cogan, said the rail barrier was down.
"The train is going through," Cogan said. "And I was just looking around, just watching things happen. And noticed that in the bus lane, the double-decker bus ... I saw him, and he just kept going.
"I just thought maybe there's a side way around or something, but instantly, he just ... he smoked the train. He went through the guard rail and just hammered the train, and then it was just mayhem."
Via Rail canceled trains on its Ottawa-Toronto route after the accident, which occurred just outside a suburban train station, Fallowfield.
The train tracks in the area cross a major city street and a transit line reserved for buses only.
Canadian Prime Minister Stephen Harper posted a message on Twitter saying he was deeply saddened by the accident and his thoughts and prayers were with the families of those involved.