Opencv与QT结合编程显示图像
首先QT的工程文件添加代码:(路径中不能有空格,QT不能解析)
INCLUDEPATH += C:\OpenCV\cv\include \
C:\OpenCV\cvaux\include \
C:\OpenCV\cxcore\include \
C:\OpenCV\otherlibs\highgui
LIBS += C:\OpenCV\lib\cv.lib \
C:\OpenCV\lib\cvaux.lib \
C:\OpenCV\lib\cxcore.lib \
C:\OpenCV\lib\highgui.lib \
C:\OpenCV\lib\cvcam.lib
widget头文件增加代码:
private:
Ui::WidgetClass *ui;
IplImage* m_image;//用来加载图片的图片结构指针
IplImage *tempImg;//临时存储图片结构的指针
QImage *m_lpimg;//QT的QImage图像指针
widget的实现文件的函数代码
void Widget::on_pushButton_clicked()
{
m_image = cvLoadImage("1.jpg",-1);//加载图片
if(NULL==m_image)
return; //加载失败
m_lpimg = new QImage(QSize(m_image->width,m_image->height),QImage::Format_RGB888);//创建一副QImage图片
tempImg = cvCreateImageHeader(cvSize(m_image->width,m_image->height),8,3);//创建IplImage头
tempImg->imageData = (char*)m_lpimg->bits();//将IplImage头的数据指针指向QImage的数据
if(m_image->origin == IPL_ORIGIN_TL)//判断坐标模式,不判断的话可能加载的图片显示的时候是翻转的
{
cvCopy(m_image,tempImg,0);//拷贝载入的图像的信息
}
else
{
cvFlip(m_image,tempImg,0);//图像要翻转
}
cvCvtColor(tempImg,tempImg,CV_BGR2RGB);//opencv采集的图像存储的是BGR 要转换为RGB才能正常显示到QImage中
}
如果要显示视频数据,只需要重载paintEvent事件就可以了,可以参考博文:
http://mobile.51cto.com/symbian-271260.htm
http://mobile.51cto.com/symbian-271265.htm