2

可能重复:
将 IplImage IPL_DEPTH_32S 转换为 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()......任何人帮助我......谢谢提前......

实际工作的代码

image = QImage((const unsigned char*)frame.data,frame.cols,
               frame.rows,frame.step,QImage::Format_RGB888);
4

1 回答 1

4

这可能是一个填充问题。你还没有说你的frame变量的类型是什么,但是IPLImage有一个widthStep字段。将此构造函数用于 QImage

QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )

widthStep并作为bytesPerLine参数传递。

于 2013-01-24T18:13:25.307 回答