更快地从IplImage转换成QImage

    在Qt平台上使用OpenCV肯定会遇到从IplImage到QImage的转换问题,找了很多资料,忽略那些太差或者太费时的算法,这样的一个算法还是很不错的。

QImage *  CjwCvImageToQImage ( const IplImage * cvimage )
{
    if (!cvimage)
        return 0;
    QImage *qimage =new  QImage(cvimage->width, cvimage->height, QImage::Format_RGB32);
 
  
    int cvIndex = 0;
    int cvLineStart = 0;
    for (int y = 0; y < cvimage->height; y++)
    {
        unsigned char red,green,blue;
        cvIndex = cvLineStart;
        for (int x = 0; x < cvimage->width; x++)
        {
            red = cvimage->imageData[cvIndex+2];
            green = cvimage->imageData[cvIndex+1];
            blue = cvimage->imageData[cvIndex+0];
            qimage->setPixel(x,y,qRgb(red, green, blue));
            cvIndex += 3;
        }
        cvLineStart += cvimage->widthStep;
    }
    return qimage;
}

转换一幅360*640的图片大约需要25ms。

后来发现IplImage结构中有imageData这样的一个uchar*类型变量,而QImage可以利用data构造对象,所以就有了下面的更有效的算法:

QImage* CjwIplToQImg(const IplImage *cvImg)
{
 
  
    if(!cvImg)
 
  
        return NULL;
 
  
    IplImage* temp=NULL;
 
  
    temp=cvCloneImage(cvImg);
 
  
    cvCvtColor(cvImg,temp,CV_BGR2RGB);
 
  
 
  
 
  
    uchar* imgData = (uchar*)(temp->imageData);
 
  
    QImage *qImg=new QImage(imgData,temp->width,temp->height,QImage::Format_RGB888);
 
  
    return qImg;
 
  
    cvReleaseImage(&temp);
 
  
    delete imgData;
 
  
}

转换同样的一幅图片只需要15ms,可以发现不仅代码量大大减少,而且速度也大幅提升了。

    最近一直在搞Qt平台上的OpenCV应用,希望Qt和OpenCV越走越近!

转载于:https://www.cnblogs.com/jwchen08/archive/2011/03/17/5942546.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值