使用 QImage 和 OpenCV 显示图像 [重复]
Posted
技术标签:
【中文标题】使用 QImage 和 OpenCV 显示图像 [重复]【英文标题】:Displaying an image with QImage and OpenCV [duplicate] 【发布时间】:2013-01-24 17:09:21 【问题描述】:可能重复:Fastest method to convert IplImage IPL_DEPTH_32S to QImage Format_RGB32
我在使用 Qt 显示图像时遇到了一个奇怪的问题...我使用 OpenCV 读取视频帧并将其从 BGR 转换为 RGB。
video >> frameOrg;
cvtColor(frameOrg,frameOrg,CV_BGR2RGB);
然后我使用裁剪样式在图像上选择一个 ROI..
frame = frameOrg(roi);
我通过信号/插槽将选定的 ROI 发送到小部件进行显示.. 显示使用的 paintEvent()
image = QImage((const unsigned char*)frame.data,frame.cols,
frame.rows,QImage::Format_RGB888);
QRectF target(0.0,0.0,image.width(),image.height());
QRectF source(0.0,0.0,image.width(),image.height());
QPainter painter(this);
painter.drawImage(target,image,source);
但是,每当我选择 ROI 的奇数值宽度和高度的某种组合时,我都会得到一个奇怪的显示,如下所示... 原图
所选投资回报率的图像
我需要做一些修改吗? windows 7显示有问题吗?使用imshow()
显示时相同的 ROI 显示正确...任何人帮助我..thanx 提前...
有效的实际代码
image = QImage((const unsigned char*)frame.data,frame.cols,
frame.rows,frame.step,QImage::Format_RGB888);
【问题讨论】:
某处不是缺少 +1 吗?行i
总是左移i
列,这只是前一行缺少1 列的传播。
这种情况并不总是发生......仅对于某些组合,我得到了如此奇怪的结果......
然后明确指出其中一些组合。
我已经讨论过这个here。
@karlphillip 这个问题显然不是那个问题的重复。它处理的是与这里描述的完全不同的问题。
【参考方案1】:
这可能是填充问题。你还没有说你的frame
变量的类型是什么,但是IPLImage
有一个widthStep
字段。将此构造函数用于 QImage
QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )
并将widthStep
作为bytesPerLine
参数传递。
【讨论】:
+1 我同意,这通常看起来像 4 字节对齐问题以上是关于使用 QImage 和 OpenCV 显示图像 [重复]的主要内容,如果未能解决你的问题,请参考以下文章