Qt中显示opencv生成图片

来源:互联网 发布:bi数据产品经理 编辑:程序博客网 时间:2024/05/20 22:31

先给出本文章的转载地址:Qt中显示opencv生成图片

注:把opencv的运行结果放到qt界面指定的位置,而不是opencv自己独立的小窗口。

主要思路就是: 不是把opencv那个窗口嵌入到qt里面,而是把opencv生成的图片数据在qt 里面表示出来,那样就可以随意操作了。

首先在mainwindow.h中添加私有成员变量:

    QImage * qImage; // qt 中的图片类型指针    IplImage * image;  // opencv里的图片类型指针    IplImage * tempImage;

然后在响应函数处添加如下代码:

void MainWindow::on_get_picture_clicked(){    //第一步:下面是加载一张图片,是借助opencv函数来加载的图片    this->image = cvLoadImage("test.jpg",1);// 用opencv函数加载一张图片    // 第二步:实例化一个空的QImage 和一个  IplImage    this->qImage = new QImage(QSize(this->image->width,this->image->height),QImage::Format_RGB888);    // 根据上面加载到的图片,建立一个相同格式(指的是长和高)的opencv里的图片对象    this->tempImage = cvCreateImageHeader(cvSize(this->image->width,this->image->height),8,3);    // 第三步    this->tempImage->imageData = (char*)(this->qImage->bits());    // tempImage->imageData指向的存放图像实体区域的指针, qlmage->bits() 是QT中 图像实体区域指针,现在让tempImage->imageData 也指向 qlmage->bits() 指向的区域    cvCopy(this->image,this->tempImage,0);// 把图像数据从this->image 拷贝到 this->tempImage指向的区域,而this->tempImage此时指向的区域和this->qImage->bits()所指的是同一个区域    //cvCvtColor(this->tempImage,this->tempImage,CV_BGR2RGB); //这个是颜色空间转换    //第四步    this->ui->label->setPixmap((QPixmap::fromImage(*this->qImage)).scaled(this->ui->label->size()));// 这句话就是你想要的 把opencv处理出来的图片放到 qt 指定的方框里了    // 下面这两句是opencv独立窗口显示图片,用来对比    cvNamedWindow("show");    cvShowImage("show",this->image);    cv::waitKey(5000);}

主要代码如下: