Qt 使用QImage和OpenCV显示图像
可能重复:Qt 使用QImage和OpenCV显示图像,qt,image-processing,opencv,qt5,qimage,Qt,Image Processing,Opencv,Qt5,Qimage,可能重复: 我在用Qt显示图像时遇到了一个奇怪的问题…我用OpenCV读取了一个视频帧,并将其从BGR转换成RGB video >> frameOrg; cvtColor(frameOrg,frameOrg,CV_BGR2RGB); 然后我使用裁剪样式在图像上选择一个ROI frame = frameOrg(roi); 我通过信号/插槽将选定的ROI发送到一个小部件进行显示。显示器的paintEvent()使用 image = QImage((const unsigned ch
我在用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宽度和高度的组合时,我会得到一个奇怪的显示,如下所示。。。
原始图像
所选ROI的图像
我需要做一些修改吗?windows 7在显示方面是否有问题?使用imshow()
显示时,相同的ROI将正确显示…任何人都可以帮助我..提前
有效的实际代码
image = QImage((const unsigned char*)frame.data,frame.cols,
frame.rows,frame.step,QImage::Format_RGB888);
这可能是一个填充问题。您没有说明
frame
变量的类型,但是IPLImage
有一个widthStep
字段。为QImage使用此构造函数
QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )
并将
widthStep
作为bytesPerLine
参数传递。这可能是一个填充问题。您没有说明frame
变量的类型,但是IPLImage
有一个widthStep
字段。为QImage使用此构造函数
QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )
并将
widthStep
作为bytesPerLine
参数传递。是否缺少+1?行i
总是左移i
列,这只是前一行缺少1列的传播。这并不总是发生……对于某些组合,只有我得到了如此奇怪的结果……然后明确指出其中的一些组合。我已经说过了。@karlphillip这个问题显然不是那个问题的重复。它所处理的问题与这里描述的完全不同。a+1不是缺失了吗?行i
总是左移i
列,这只是前一行缺少1列的传播。这并不总是发生……对于某些组合,只有我得到了如此奇怪的结果……然后明确指出其中的一些组合。我已经说过了。@karlphillip这个问题显然不是那个问题的重复。它处理的问题与这里描述的完全不同。+1我同意,这通常看起来像4字节对齐问题+1我同意,这通常看起来像4字节对齐问题