免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4023 | 回复: 5
打印 上一主题 下一主题

龙芯开源大赛心得之-----------IplImage和QImage的转换 [复制链接]

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-11 10:37 |只看该作者 |倒序浏览
 由于参加龙芯开源大赛的“面部识别安全登录”项目,我们在人脸识别的过程中的颇有感触,这里跟大家一起讨论分享一下,小生水平有限,倘若有错误之处,还请各位不吝赐教!

  其中人脸识别相关的工作需要opencv 的支持,而UI的设计我们采用的是跨平台的开发环境—Qt,其中opencv使用的图像数据结构---IplImage,而Qt中使用的是QImage类,但是目前貌似又没有现成的转换函数,果断上网百度之。
  发现可以使用QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )这个构造函数实现,于是使用下面这行代码
  QImage qimg((unsigned char * )Iimg.imageDataOrigin
  ,Iimg.width
  ,Iimg.height
  ,Iimg.widthStep
  ,QImage::Format_RGB88;
  其中Limg是IplImage格式的彩色图片使用这个方法之后能是能显示图片了,但是总感觉有些异样,如下图:


  其中人脸部分的颜色显然失真了。经过一番艰苦卓越的奋斗,终于找到原因了:IplImage储存采用的是BGR方式,而QImage则采用的是RGB方式,也就是说这两种数据结构的通道有两个是反的得交换一下,交换通道应该是small case了。于是有如下代码:
  void IplToRGB(IplImage &img)//注意这里使用的是引用传值,转换之后对参数图片的通道有影响
  {
  unsigned char *p = (unsigned char*)img.imageData;
  int temp;
  for(int i = 0;i
  {
  for(int j = 0;j
  {
  temp = p[0];
  p[0] = p[2];
  p[2] = temp;//交换0和2通道(也就是R和B通道)
  p += img.nChannels;
  }
  }
  }
  因此,在转换为Qimage之前先将IplImage的B和R通道互调,再转换为QImage就不会失真了。
  转化之后的效果图如下:
  

论坛徽章:
0
2 [报告]
发表于 2012-10-19 22:25 |只看该作者
不错,学习了!

论坛徽章:
0
3 [报告]
发表于 2012-10-20 08:25 |只看该作者
楼主厉害!

论坛徽章:
0
4 [报告]
发表于 2012-10-22 14:25 |只看该作者
龙芯最近很活跃啊,太有用了

论坛徽章:
0
5 [报告]
发表于 2012-10-22 14:28 |只看该作者
在转换为Qimage之前先将IplImage的B和R通道互调,再转换为QImage就不会失真了。
龙芯真给力,持续关注中、、、、、

论坛徽章:
0
6 [报告]
发表于 2012-10-22 17:03 |只看该作者
这个好难啊,好好研究研究哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP