The 26-year-old has signed a three-year contract, which includes an option of a further year at Carrow Road, and will become an official Norwich player on July 1.
"Norwich is a team that wants to get promoted back to the Premier League at the first opportunity, so I'm excited to come here and start playing football for a team like this," Lafferty told the club's official website.
"I've played in the Championship before and I've played against Norwich, and things I noticed about the club were the fans and the football they played.
"Speaking to the gaffer, everything he said and everything he wants me to do, it's good to have someone like that believing in me. I can't wait to get started."