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,可以发现不仅代码量大大减少,而且速度也大幅提升了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值