可能重复:
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正确显示...任何人都提前帮助我......提前付款......
实际工作的代码
image = QImage((const unsigned char*)frame.data,frame.cols,
frame.rows,frame.step,QImage::Format_RGB888);
答案 0 :(得分:4)
这可能是填充问题。您尚未说明frame
变量的类型,但IPLImage
有widthStep
字段。将此构造函数用于QImage
QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )
并将widthStep
作为bytesPerLine
参数传递。