当前位置 : 首页 » 文章分类 :  开发  »  OpenCV中Mat结构和Qt中QImage结构RGB排列顺序不同

OpenCV中Mat结构和Qt中QImage结构RGB排列顺序不同

Qt中利用OpenCV显示图片和视频时,需要将opencv中的MatIplImage结构转换为Qt中QImage结构,转换时需要注意的地方是OpenCV中和Qt中三原色排列顺序的不同:OpenCV中是以BGR的顺序排列,Qt中是以RGB的顺序排列,两种格式在转换时如果没注意到这点,就会出现问题,如下图:

上图是读取的美剧《总统一家》中的一集,mkv格式的(OpenCV2中增加了对更多视频格式的支持),右边的色彩还原是正确的。可以看到,由于OpenCV中是BGR排列,Qt中是RGB排列,如果没有经过转换,直接构造QImage对象的话,红色通道和蓝色通道会发生对调:最直观的,上图中第一夫人的红裙在左边成了蓝色的。

转换的方法就是调用OpenCV中的cvCvtColor函数,如下形式

cvCvtColor(&img,&img,CV_BGR2RGB); //img是IplImage类型

还有个更好的方法,是网上一个大神写的专门将Mat结构转换为QImage结构的函数,下载地址如下:
http://download.csdn.net/detail/masikkk/5284161
调用方式也很简单:

QImage image = MatToQImage(img); //img是Mat类型

上一篇 Qt中整型转字符串的方法

下一篇 Qt Creator中无法使用OpenCV2中新函数的解决办法

域名迁移公告
2017年12月20日起,本博客迁移到新域名madaimeng.com,旧域名masikkk.com不再更新内容,但将永久保持可访问!
阅读
296
阅读预计1分钟
创建日期 2013-04-21
修改日期 2017-07-11
类别
百度推荐