QWidget 绘制扭曲的角度 QImage

QWidget draws distorted angled QImage

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

我创建了一个 class ImageDisplay,它是 QWidget class.

的子 class

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

我试验了一下,发现跟图片尺寸有关系。

比如这张320x391像素的图片渲染正常

但如果将尺寸更改为 321x391(使用 Gimp),则显示如下:

这是 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);
}

有人知道问题出在哪里以及如何解决吗?

提前致谢!

我觉得你可能需要在第四个参数创建QImage的时候指定图片的步长(每行字节数):

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