Qt中显示opencv生成图片

先给出本文章的转载地址: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);
}

主要代码如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值