Opencv缩放图片在QLable上显示问题

问题描述:

   环境:win7 + QT5.9.8 + Opencv3.4.2
   用QT开发一个GUI界面。在界面上有一个label用于显示图像。

一个slider,当拖动slider的滑块时缩放图像,缩放后的图像在label上显示。
图像的缩放分别采用OpecnCV中的 cv::resize() 和 QT的QPixmap::scaled()实现。
经测试发现两种方法都可实现缩放,但是显示的时候出现了不同的变现:
1) 通过OpecnCV中的 cv::resize()缩放后,将缩放后的图像通过label->setPixmap()时出错。
一般连续缩放几次后,程序崩溃。错误信息如下:

Error - RtlWerpReportException failed with status code :-1073741823. Will try to launch the process directly
16:43:38: 程序异常结束。

2)而通过QT的QPixmap::scaled()缩放后,将缩放后的图像通过label->setPixmap()显示一切正常。

代码片段:

slider 滑块拖动的槽函数
void MainWindow::on_slider_valueChanged(int val)
{

    Mat mat_src   //需要缩放的输入图像,通过文件或视频帧,获取过程略
    const QPixmap pix_src = cvMat2QPixmap(mat_src);    //原始图像Mat转Pixmap

#ifdef Scale_byMat
    Mat mat_dest;
    //通过Opencv缩放图像
    cv::resize(mat_src, mat_dest, Size(mat_src.cols*val/10, mat_src.rows*val/10),0, 0, INTER_NEAREST);
    QPixmap pix_dest = cvMat2QPixmap(mat_dest);    //缩放后的Mat图像转QPixmap

#endif

#ifdef Scale_byPix
    int src_Width = pix.width();                   //获取原始图像宽高
    int src_height = pix.height();
    //通过QT QPixmap缩放图像,缩放后的图像保存在pix_dest
    QPixmap pix_dest = pix_src.scaled(src_Width*val/10, src_height*val/10, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
#endif

    //获得缩放后的图像pixmap后,下面的代码用于将图像显示到lable上
    label->clear();
    label->setPixmap(pix_dest);      //当通过Opencv缩放,执行到这里异常;但通过QPixmap缩放,执行正确
        label->show();
}  
//Mat转Pixmap
QPixmap MainWindow::cvMat2QPixmap(const cv::Mat &inMat)
{

    return QPixmap::fromImage(cvMat2QImage(inMat));
}
//Mat转QImage
QImage MainWindow::cvMat2QImage(const cv::Mat &mat ) {
  switch ( mat.type() )
  {
     // 8-bit, 4 channel
     case CV_8UC4:
     {
        QImage image( mat.data, mat.cols, mat.rows, (int)mat.step, QImage::Format_RGB32 );
        return image;
     }
        // .....    经测试,输入的图格式为CV_8UC4,仅保留该分支,其它略
     default:
        qDebug("Image format is not supported: depth=%d and %d channels\n", mat.depth(), mat.channels());
        break;
  }
  return QImage();
}

https://blog.csdn.net/hahaha_2017/article/details/81349545