程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了调整大小的 opencv 图像在 QWidget C++ 上无法正确显示大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决调整大小的 opencv 图像在 QWidget C++ 上无法正确显示?

开发过程中遇到调整大小的 opencv 图像在 QWidget C++ 上无法正确显示的问题如何解决?下面主要结合日常开发的经验,给出你关于调整大小的 opencv 图像在 QWidget C++ 上无法正确显示的解决方法建议,希望对你解决调整大小的 opencv 图像在 QWidget C++ 上无法正确显示有所启发或帮助;

我尝试在 QLabel 上显示大小为 3000 * 4096 的 OpenCV 图像。图像在显示前被调整大小。如果大小可整除的调整大小因子(例如 2,4,8,16,32),则图像显示正确。如果尺寸不能被因子整除(例如 3、5、7、10),则图像无法正确显示。 我也尝试使用重新缩放因子作为输入而不是 cv:Size() 但它的行为相似。例如:与 fx = fy = 0.25 一起正常工作,但与 fx=fy=0.3 一起工作不正确。

OpenCV 显示,比例因子 = 4:

调整大小的 opencv 图像在 QWidget C++ 上无法正确显示

在 QLabel 上显示,比例因子 = 4:

调整大小的 opencv 图像在 QWidget C++ 上无法正确显示

通过 OpenCV 显示,比例因子 =10:

调整大小的 opencv 图像在 QWidget C++ 上无法正确显示

在 QLabel 上显示,比例因子 = 10:

调整大小的 opencv 图像在 QWidget C++ 上无法正确显示

以下是代码摘要:

resize(opencv_image,img_resize,cv::Size(opencv_image_.cols/4,opencv_image_.rows/4),cv::INTER_AREA);
ui->lbl_conTinuous_grab->setpixmap(Qpixmap::fromImage(Putimage(img_resizE)));

QImage Putimage(const Mat& mat)
{
    // 8-bits unsigned,NO. OF CHAnnELS=3
    // copy input Mat
    const uchar *qImageBuffer = (const uchar*)mat.data;
    // Create QImage with same dimensions as input Mat
    QImage img(qImageBuffer,mat.cols,mat.rows,QImage::Format_RGB888);
    return img.rgbSwapped();
}

解决方法

所以问题是OpenCV的step是一个size_t,当你把图片转成QImage的时候需要把它转成int。但是,我仍然不知道为什么当图像大小可以被调整大小因子整除时它会起作用。

QImage img(qImageBuffer,mat.cols,mat.rows,static_cast<int>(mat.step),QImage::Format_RGB888);

大佬总结

以上是大佬教程为你收集整理的调整大小的 opencv 图像在 QWidget C++ 上无法正确显示全部内容,希望文章能够帮你解决调整大小的 opencv 图像在 QWidget C++ 上无法正确显示所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。