作者:网络害虫 中国海洋大学
一、实验背景
VC++2008与opencv2.3联合编程。
由于实验需要使用opencv,将RGB图转化为HSV图进行图片处理;同时,也由于是初学opencv,所以对很多语句不是很了解。所以,在搜索了网上大量资料后,进行了学习,同时产生了一下问题。
二、实验的问题及解决
我原本是用matlab实验,后来由于matlab的处理速度太慢,故需要在vc中用opencv重新编写。所以,我将opencv生成的图片和matlab生成的图片进行了对比。
不理想方法:(来自百度百科)
IplImage *dst_image =
cvCreateImage(cvGetSize(src),32,src->nChannels);
IplImage *src_image_32 =
cvCreateImage(cvGetSize(src),32,src->nChannels);
cvConvertScale(src,src_image_32,1.0/255.0,0);//将原图RGB归一化到0-1之间
cvCvtColor(src_image_32,dst_image,CV_BGR2HSV);//得到HSV图
将原图由8个字节转化为32个字节;先做归一化,再转化图片。
再将得到的图片分离到H,S,V三个单通道上观察,差别巨大;效果十分的不理想。
理想方法:
cvCvtColor(src,dst_image,CV_BGR2HSV);//得到HSV图
直接使用,不要归一;将图片分离到H,S,V三个单通道上观察,发现和matlab的处理效果一致。但是,HSV图本身和matlab的处理效果不同。原因:
matlab中是按R,G, B三通道显示:
opencv中是按B, G, R三通道显示。