pkokocl 2020-07-08 17:26 采纳率: 0%
浏览 250

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();
}
  • 写回答

1条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀