QWidget绘制扭曲的角度QImage

时间:2016-08-20 17:58:00

标签: c++ opencv qt-creator qwidget qimage

我正在为我的数字图像处理课做家庭作业,我正在使用OpenCV和QT Framework。

我创建了一个类ImageDisplay,它是QWidget类的子类。

我使用OpenCV来操作灰度图像,然后从QImage对象创建Mat对象。之后我使用QWidget::drawImage()绘制图像。但有时它会显示扭曲的,有角度的图像。

我正在尝试并发现它与图像尺寸有关。

例如,正常渲染320x391像素的图像 The image with 320x391 pixels is rendered normally

但是如果将尺寸更改为321x391(使用Gimp),它会显示如下: The image with 321x391 pixels is rendered anormally

这是paintEvent方法的代码:

void ImageDisplay::paintEvent(QPaintEvent *){
   QPainter painter(this);
   Mat tmp;
   /* The mat in the next line is a Mat object that contains the image data */
   cvtColor(mat, tmp, CV_GRAY2BGR);
   QImage image(tmp.data, tmp.cols, tmp.rows, QImage::Format_RGB888);
   painter.drawImage(rect(), image);
}

有没有人知道问题是什么以及如何解决?

提前致谢!

1 个答案:

答案 0 :(得分:3)

我认为在第四个参数中创建QImage时,您可能需要指定图像的步长(每行的字节数):

QImage image((const uchar*) tmp.data, tmp.cols, tmp.rows, tmp.step, QImage::Format_RGB888);