Officials said their first attempt to raise the MV Miraz, which was carrying up to 200 passengers, off the floor of the 17m deep river bed had failed.
Two salvage ships were now making another move to drag it to the shore.
"Many of the passengers rushed to lower decks of the ship to escape from heavy wind. They were trapped. I am afraid most of the bodies will be found there," Bangladesh's water transport authority chief Shamsuddoha Khandaker told AFP.
Khandaker said up to 40 people were able to swim to safety or were rescued by fishing boats after the vessel began to list but the vessel went down in minutes.
"The death toll now stands at 22, including 12 women and children," he added.
The local police chief Ferdous Ahmed confirmed the death toll.
The exact number of passengers was not immediately known as Bangladeshi ferries do not maintain passenger logbooks and very often carry many more than their official limit.
Officials had initially said up to 350 people could have been on board when the ferry capsized on Thursday, but Khandaker said the number was thought to be smaller.
"It is a mid-sized ferry and was about 90 feet long. It can carry around 500 passengers without cargo. But from what we have gathered so far, it was carrying around 150-200 passengers at the time of the accident," he said.
An investigation has been ordered into whether the vessel was carrying more than its capacity or whether it had structural faults.