Dmti 0 Жалоба Опубликовано December 21, 2014 Добрый день, появилось свободное время, и решил дописать свою программку, и сразу столкнулся с тем что, не могу передать Мат через сигнал/слот QObject::connect(this,SIGNAL(Frames(Mat&)), CamerasNew, SLOT(detectFase(Mat&)));//Находим рожу или QObject::connect(this,SIGNAL(Frames(Mat)), CamerasNew, SLOT(detectFase(Mat))); Всю субботу просидел, пытаясь применить qRegisterMetaType () . Но прогуглев кучу статей, так ничего не смог сделать, решил обратиться к гуру. Если не трудно, объясните, как правильно надо передавать матрицы и вектора из потока в поток. Спасибо. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Dmti 0 Жалоба Опубликовано December 21, 2014 Так и не смог победить - получаю ошибку, хоть тресни. QObject::connect: Cannot queue arguments of type 'Mat' (Make sure 'Mat' is registered using qRegisterMetaType().) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ter_nk 0 Жалоба Опубликовано December 22, 2014 Работайте не с Мат, а с массивом байтов vector<uchar> buf; imencode(".bmp", image, buf); int size = buf.size(); for (int i = 0; i < size; i++) bArr[i] = (uchar)buf[i]; imdecode - функция обратного преобразования Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Dmti 0 Жалоба Опубликовано December 22, 2014 ошибка была в месте написания команды: Q_DECLARE_METATYPE(cv::Mat); после перенесения её до начала int main() { и строки qRegisterMetaType<Mat>("Mat"); перед QObject::connect(this,SIGNAL(Frames(Mat)), CamerasNew, SLOT(detectFase(Mat)));//Находим рожу ошибка исчезла, но неисчезли проблемы в detectFase, Мат приходит пустым. Я где-то читал, что вроде как получаю только копию, а чтобы передовать как есть, нужно сказать - хочу не копию. Должно получится что-то типа: emit Frames(ХХХ(frame)); а вот это ХХХ не могу вспомнить, хоть тресни. Или я что-то неправильно понимаю? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах