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);
我正在为我的数字图像处理做家庭作业 class,我正在使用 OpenCV 和 QT Framework。
我创建了一个 class ImageDisplay
,它是 QWidget
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);