MatToQImage QPixmap :: scaled:Pixmap是一个空像素图

时间:2015-03-30 13:04:56

标签: opencv qpixmap

我尝试将由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)时,它工作正常......

有人能帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:0)

例如,您需要使用temp变量保存图像

QPixmap icon = QPixmap(":/img/" + iconFileName);
QPixmap tmp = icon.scaled(30, 30, Qt::KeepAspectRatio);
value = tmp;

此消息消失了!