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

相关文章

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

Spring MVC 图片上传

引入需要的包 <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal

速盾高防cdn是怎么解决网站攻击的?

速盾高防CDN是一种基于云计算技术的网络安全解决方案,可以有效地保护网站免受各种网络攻击的威胁。它通过在全球多个节点部署服务器,将网站内容缓存到这些服务器上,并通过智能路由技术将用户的请求引导到最近的服务器上,以提供更快的访问速度和更好的网络性能。 速盾高防CDN主要采用以下几种方式来解决网站攻击: 分布式拒绝服务攻击(DDoS)防护:DDoS攻击是一种常见的网络攻击手段,攻击者通过向目标网

Prompt - 将图片的表格转换成Markdown

Prompt - 将图片的表格转换成Markdown 0. 引言1. 提示词2. 原始版本 0. 引言 最近尝试将图片中的表格转换成Markdown格式,需要不断条件和优化提示词。记录一下调整好的提示词,以后在继续优化迭代。 1. 提示词 英文版本: You are an AI assistant tasked with extracting the content of

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文