The 25-year-old, who appeared in all 46 of City's Championship games last season, scored 19 goals and registered seven assists as the club finished 11th.
"I'm delighted to be here and to be a Premier League player," Reid told Cardiff's official website. "I want to show my high energy and work rate, as well as being creative and working for the team. I'm buzzing to get started."
Bluebirds manager Neil Warnock added: "I've been after Bobby for a while now. I like the lad. By all accounts he's great around the dressing room. He can play in a number of positions and his best is yet to come.
"Players like Bobby and Josh Murphy are hungry, and that is what we need now. We're very happy to bring Bobby in."
Cardiff begin the Premier League season with a trip to Bournemouth.