我尝试将由OpenCV处理的视频(采用Mat格式)显示给Qt自定义的FrameLabel。当我添加OpenCV函数 imshow(&#34; frame&#34;,mat)时,可以填充Mat框架,但转到 QPixmap :: scaled:Pixmap是一个null pixmap < / em>我删除了imshow(&#34; frame&#34;,mat)。即使试图锁定线程也无法解决问题。我做了一些搜索,发现可能由于QPixmap资源应该定义为&#34; xxx.qrc&#34;。 我的代码如下:
void IntelligentSurveillance::on_pushButton_clicked(){
QMutex processingMutex;
string filename = VIDEO_PATH;
VideoCapture cap;
cap.open(filename);
Mat mat;
QImage qImage;
for (;;)
{
cap >> mat;
//processingMutex.lock();
qImage = MatToQImage(mat);
//processingMutex.unlock();
ui.frame->setPixmap(QPixmap::fromImage(qImage).scaled(ui.frame->width(), ui.frame->height(), Qt::IgnoreAspectRatio));
//imshow("frame", mat);
if (waitKey(30) >= 0) break;
}}
输出总是如下: QPixmap :: scaled:Pixmap是一个空像素
问题是,当我添加 imshow(&#34; frame&#34;,mat)时,它工作正常......
有人能帮忙吗?谢谢!
答案 0 :(得分:0)
例如,您需要使用temp变量保存图像
QPixmap icon = QPixmap(":/img/" + iconFileName);
QPixmap tmp = icon.scaled(30, 30, Qt::KeepAspectRatio);
value = tmp;
此消息消失了!