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 Calendar设置上个月时,日期不存在或错误提示问题及解决

《JAVACalendar设置上个月时,日期不存在或错误提示问题及解决》在使用Java的Calendar类设置上个月的日期时,如果遇到不存在的日期(如4月31日),默认会自动调整到下个月的相应日期(... 目录Java Calendar设置上个月时,日期不存在或错误提示java进行日期计算时如果出现不存在的

Nginx错误拦截转发 error_page的问题解决

《Nginx错误拦截转发error_page的问题解决》Nginx通过配置错误页面和请求处理机制,可以在请求失败时展示自定义错误页面,提升用户体验,下面就来介绍一下Nginx错误拦截转发error_... 目录1. 准备自定义错误页面2. 配置 Nginx 错误页面基础配置示例:3. 关键配置说明4. 生效

Java调用DeepSeek API的8个高频坑与解决方法

《Java调用DeepSeekAPI的8个高频坑与解决方法》现在大模型开发特别火,DeepSeek因为中文理解好、反应快、还便宜,不少Java开发者都用它,本文整理了最常踩的8个坑,希望对... 目录引言一、坑 1:Token 过期未处理,鉴权异常引发服务中断问题本质典型错误代码解决方案:实现 Token

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

maven异常Invalid bound statement(not found)的问题解决

《maven异常Invalidboundstatement(notfound)的问题解决》本文详细介绍了Maven项目中常见的Invalidboundstatement异常及其解决方案,文中通过... 目录Maven异常:Invalid bound statement (not found) 详解问题描述可

C#中DateTime的格式符的实现示例

《C#中DateTime的格式符的实现示例》本文介绍了C#中DateTime格式符的使用方法,分为预定义格式和自定义格式两类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录DateTime的格式符1.核心概念2.预定义格式(快捷方案,直接复用)3.自定义格式(灵活可控

nacos服务无法注册到nacos服务中心问题及解决

《nacos服务无法注册到nacos服务中心问题及解决》本文详细描述了在Linux服务器上使用Tomcat启动Java程序时,服务无法注册到Nacos的排查过程,通过一系列排查步骤,发现问题出在Tom... 目录简介依赖异常情况排查断点调试原因解决NacosRegisterOnWar结果总结简介1、程序在

使用C#导出Excel数据并保存多种格式的完整示例

《使用C#导出Excel数据并保存多种格式的完整示例》在现代企业信息化管理中,Excel已经成为最常用的数据存储和分析工具,从员工信息表、销售数据报表到财务分析表,几乎所有部门都离不开Excel,本文... 目录引言1. 安装 Spire.XLS2. 创建工作簿和填充数据3. 保存为不同格式4. 效果展示5