打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【OpenHW12】QImage与IplImage相互转换

【OpenHW12】QImage与IplImage相互转换

2013-06-29 02:08:52
分享:

       在qt中使用opencv时,不可避免的要用到图像的显示,若用opencv自带的函数进行显示,需要在linux下安装gtk,在PC机上比较容易安装,但在zedboard板卡上移植rainysky做了好久都没有搞定。故采用了QImage与IplImage相互转换的方法解决图像的显示,即用QImage显示图像,在IplImage格式采用opencv处理图像。

QImage转为IplImage:

 

IplImage *QImageToIplImage( QImage * qImage)
{
    int width = qImage->width();
    int height = qImage->height();
    CvSize Size;
    Size.height = height;
    Size.width = width;
    IplImage *IplImageBuffer = cvCreateImage(Size, IPL_DEPTH_8U, 3);
    for (int y = 0; y < height; ++y)
    {
        for (int x = 0; x < width; ++x)
        {
            QRgb rgb = qImage->pixel(x, y);
            cvSet2D(IplImageBuffer, y, x, CV_RGB(qRed(rgb), qGreen(rgb), qBlue(rgb)));
        }
    }
    return IplImageBuffer;
}

 

IplImage 转为 QImage:

这个转换需要考虑到 IplImage是几通道的,或者中间可能会出现问题。

QImage *iplImgToQImg(IplImage* cvimage)
{
 if (!cvimage)
  return 0;
 QImage* desImage = new QImage(cvimage->width,cvimage->height,QImage::Format_RGB32);

 for(int i = 0; i < cvimage->height; i++)
 {
  for(int j = 0; j < cvimage->width; j++)
  {
   int r,g,b;

   if(3 == cvimage->nChannels)
   {
    b=(int)CV_IMAGE_ELEM(cvimage,uchar,i,j*3+0);
    g=(int)CV_IMAGE_ELEM(cvimage,uchar,i,j*3+1);
    r=(int)CV_IMAGE_ELEM(cvimage,uchar,i,j*3+2);

   }
   else if(1 == cvimage->nChannels)
   {
    b=(int)CV_IMAGE_ELEM(cvimage,uchar,i,j);
    g=b;
    r=b;
   }

   desImage->setPixel(j,i,qRgb(r,g,b));
  }
 }
 return desImage;
}

 

浏览 ( 887 ) | 评论 ( 0 )
以下网友评论只代表个人观点,不代表本网站的观点或立场
全部评论 (0)
尚无评论.
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【图像算法】彩色图像分割专题三:边缘检测+区域生长 法
mini6410成功移植OPENCV
Opencv
Qt5中进行OpenCV开发教程
codebook
C#调用 opencv cv::Mat 图像, 采用折中方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服