In short, I get following error:
QObject::connect: Cannot queue arguments of type \'cv::Mat\'
(Make sure \'cv::Mat\' is registered using qRegisterMetaType().)
<
You need to call qRegisterMetaType in addition to the macro (or instead of it, depending on your needs). This is necessary for the signals to be able to marshal your data across threads. However, it might be a wiser idea to pass by reference or smart pointer, or raw pointer if you are using the QObject hierarchy to manage the object lifetime.