我正在为我的数字图像处理课做家庭作业,我正在使用OpenCV和QT Framework。
我创建了一个类ImageDisplay
,它是QWidget
类的子类。
我使用OpenCV来操作灰度图像,然后从QImage
对象创建Mat
对象。之后我使用QWidget::drawImage()
绘制图像。但有时它会显示扭曲的,有角度的图像。
我正在尝试并发现它与图像尺寸有关。
但是如果将尺寸更改为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);
}
有没有人知道问题是什么以及如何解决?
提前致谢!
答案 0 :(得分:3)
我认为在第四个参数中创建QImage时,您可能需要指定图像的步长(每行的字节数):
QImage image((const uchar*) tmp.data, tmp.cols, tmp.rows, tmp.step, QImage::Format_RGB888);