Qt下配置opencv已经成功,系统为win764位。使用的vs2010编译器。至于怎么配置好的,有其他的信息可以找到。或者改天给写出来。
为了显示图片,看有的人使用qlabel,这个就不必过多描述,除了能显示,并不能做别的事情。Qt下正儿八经显示的方法还是qpainter。这个是做绘图板用的,还可以在上面画很多的图像。QPainter加上QImage,是比较合理的组合。
问题就出来了。我用opencv读取一个视频,用>>导入到mat结构中,然后转换成QImage结构,在paintEvent中进行刷新显示。是可以的。其中关键的转换代码如下:
Mat temp,image;
temp = imread(“…”);
cvtColor(temp,image,CV_BGR2RGB);
img=QImage((unsignedchar*)(image.data),image.cols,image.rows,image.step,QImage::Format_RGB888);
这样是可以显示的,可是在imread后得到image就无法显示,输出窗口输出:
The program has unexpectedly finished.
报错界面为:
查看了每一个环节,转换后的img,通过QLabel是可以正常显示的。但是就是进入到paintEvent后就出现以上的问题。用各种高大上的搜索引擎也找不到问题出在哪里。
paintEvent()关键代码如下
painter.begin(this);
painter.drawImage(ui->frame_preview->x()+ui->centralWidget->x(),
ui->frame_preview->y()+ui->centralWidget->y(),
img);
painter.end();
并没有什么玄妙的地方。曾经一度怀疑人品问题。调试了一个上午就是卡到这里。
不过受到启发后,得到QImage类型其实可以自己读取图片,但是读取进来jpg格式是FORMAT_RGB32,不是原来的FORMAT_RGB888,这个可以转换一下。读进来之后就可以正常显示了,也可以在上面画各种图形。
问题没有真正得到解决,但是通过其他方法实现了目的。以后有方法解决再记录下来。
img.load(fileInfo_jpg->at(index_jpg).filePath());
img.convertToFormat(QImage::Format_RGB888);