项目场景:

使用Image读取图片文件,并转换为cv::Mat结构体,作为图像检测算法API的输入参数,用于检测图像中物体高度。

问题描述

在调用的过程中,相同的图像的不同的分辨率下,调用的结果不一样。如宽度为628的图像,可以正确识别,而宽度为766的图像,无法被正确识别。
QImage转为cv::Mat如下:
cv::Mat mat(img.height(), img.width(), CV_8UC3, img.bits();

原因分析:

QImage存储的方式按照字(4字节)对齐,即每行的存储的字节长度为4的倍数。如果不足4的倍数,则用0补齐。

解决方案:

修改后的转换代码如下:
cv::Mat mat(img.height(), img.width(), CV_8UC3, img.bits(), img.bytesPerLine());

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐