CMat格式转QImage格式时出现图片歪斜的情况(已解决)

2023-11-04 22:50

本文主要是介绍CMat格式转QImage格式时出现图片歪斜的情况(已解决),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       

        今天在使用qt显示图像的时候需要将CMat格式转换成QImage格式再将QImage转成Qpixmap格式,但是在使用Qimage创建Qimage对象时出现了一个严重的错误导致图像歪斜,白白浪费两个小时不得不记录一下:

        着急的话直接看看我这第一行代码是不是和你一样,是的话将其修改为第二行的样式:

//我的原始代码
QImage qimage(img_rgb.data, img_rgb.cols, img_rgb.rows, QImage::Format_RGB888);
//修改之后的代码
QImage qimage(img_rgb.data, img_rgb.cols, img_rgb.rows, img_rgb.cols * 3,QImage::Format_RGB888);

     这是出错时的图片:

这是纠正之后的图片:

---------------------------------不着急的朋友听我多解释两句--------------------------------------------

研究了一下原理:发现由于Qimage的构造函数有很多种类型:

  1. QImage(): 默认构造函数,创建一个空的图像对象。

  2. QImage(int width, int height, Format format): 根据指定的宽度、高度和图像格式创建一个空的图像对象。

  3. QImage(const QString &fileName, const char *format = nullptr): 根据文件名加载图像文件创建图像对象。可选参数 format 指定图像文件的格式,如果为 nullptr,则会自动检测文件格式。

  4. QImage(const uchar *data, int width, int height, int bytesPerLine, Format format): 根据给定的图像数据、宽度、高度、每行字节数和图像格式创建图像对象。

  5. QImage(QImage &&other) noexcept: 移动构造函数,用于将另一个 QImage 对象的资源转移到新创建的对象中。

  6. QImage(const QImage &other): 拷贝构造函数,用于创建一个与另一个 QImage 对象相同的副本。

          而我最开始只是随便使用了其中的一种(上面的2),只定义了图像的宽度、高度以及格式,从而导致我创建的Qimage对象的size是不明确的,可以理解为图片的三个通道没有被定义。本质上就是定义不明确,所以在要用CMat转QImage实现qt界面显示的时候一定要注意,指定明确的转换字节数。

        而我修改完之后的这一行代码(第4种构造方式)可以看出来,它明确定义了每行字节数,这里是值是宽度*3,其实就可以看成间接把3个维度给确定了,这样明确的定义方式就不会出现问题了。

------------------总结一下-----------------------

        平时注意养成良好的代码习惯啊,函数不是拿来就用,研究一下看清楚是为啥,不然后面debug真的有够费劲的

这篇关于CMat格式转QImage格式时出现图片歪斜的情况(已解决)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/345700

相关文章

解决java.lang.NullPointerException问题(空指针异常)

《解决java.lang.NullPointerException问题(空指针异常)》本文详细介绍了Java中的NullPointerException异常及其常见原因,包括对象引用为null、数组元... 目录Java.lang.NullPointerException(空指针异常)NullPointer

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

如何使用CSS3实现波浪式图片墙

《如何使用CSS3实现波浪式图片墙》:本文主要介绍了如何使用CSS3的transform属性和动画技巧实现波浪式图片墙,通过设置图片的垂直偏移量,并使用动画使其周期性地改变位置,可以创建出动态且具有波浪效果的图片墙,同时,还强调了响应式设计的重要性,以确保图片墙在不同设备上都能良好显示,详细内容请阅读本文,希望能对你有所帮助...

python安装whl包并解决依赖关系的实现

《python安装whl包并解决依赖关系的实现》本文主要介绍了python安装whl包并解决依赖关系的实现,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、什么是whl文件?二、我们为什么需要使用whl文件来安装python库?三、我们应该去哪儿下

MySQL安装时initializing database失败的问题解决

《MySQL安装时initializingdatabase失败的问题解决》本文主要介绍了MySQL安装时initializingdatabase失败的问题解决,文中通过图文介绍的非常详细,对大家的学... 目录问题页面:解决方法:问题页面:解决方法:1.勾选红框中的选项:2.将下图红框中全部改为英

Python脚本实现图片文件批量命名

《Python脚本实现图片文件批量命名》这篇文章主要为大家详细介绍了一个用python第三方库pillow写的批量处理图片命名的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言源码批量处理图片尺寸脚本源码GUI界面源码打包成.exe可执行文件前言本文介绍一个用python第三方库pi

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了