The striker, who was capped by England only 11 months ago, joins the Championship leaders on a three-and-a-half-year deal for an undisclosed fee.
Campbell has been restricted to just one Premier League start this season following Steven Fletcher's arrival and would have been out of contract in the summer.
The 25-year-old, who came through the Manchester United youth system, was previously linked with Hull, where he spent a season on loan in 2008/9.