• 更快地从IplImage转换成QImage


    转:http://blog.sina.com.cn/s/blog_5c70dfc80100qzif.html

    在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越走越近!
  • 相关阅读:
    再探最大公约数
    非旋treap
    初赛毒瘤汇总(持续更新中)
    架构漫谈阅读笔记五--以豆瓣得基础架构为例
    架构设计小论文
    第一阶段
    架构漫谈阅读笔记六--以淘宝数据魔方技术架构解析为例
    学习进度第八周
    架构漫谈阅读笔记一
    软件架构之 Refined Architecture阶段
  • 原文地址:https://www.cnblogs.com/lanye/p/3487733.html
Copyright © 2020-2023  润新知