使用QImage和OpenCV显示图像

时间:2013-01-24 17:09:21

标签: qt image-processing opencv qt5 qimage

  

可能重复:
  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的奇数宽度和高度的某种组合时,我得到一个奇怪的显示,如下所示...... 原始图片

full image when displayed

选择投资方式的图片

image of selected roi

我需要做一些修改吗? Windows 7在显示方面有问题吗?显示imshow()时显示的相同ROI正确显示...任何人都提前帮助我......提前付款......

实际工作的代码

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

1 个答案:

答案 0 :(得分:4)

这可能是填充问题。您尚未说明frame变量的类型,但IPLImagewidthStep字段。将此构造函数用于QImage

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

并将widthStep作为bytesPerLine参数传递。