您的位置:首页 > 编程语言 > C语言/C++

RGB2YUV-Opencv-C++

2016-09-26 10:21 387 查看
用Opencv和C++实现将一幅图片从RGB空间转换到YUV空间。

VS2015+Opencv2.4.13

注:博主小白,代码是网上摘抄合并重组来的,侵权删除,谢谢!

【函数介绍】

cvCvtColor(const CvArr* src, CvArr* dst, int code)函数是Opencv里的颜色空间转换函数,可以实现RGB颜色向HSV,HSI,YUV等颜色空间的转换,也可以转换为灰度图像。

src是输入的8-bit,16-bit或32-bit单倍精度浮点数影像;

dst是输出的8-bit,16-bit或32-bit单倍精度浮点数影像;

code是色彩空间转换的模式,CV_BGR2GRAY是RGB到灰度图像,CV_GRAY2BGR是灰度图到RGB,CV_BGR2HSV将图片从RGB空间转换为HSV空间。其中当code选用CV_BGR2GRAY时,dst需要是单通道图片。当code选用CV_BGR2HSV时,对于8位图,需要将rgb值归一化到0-1之间。这样得到HSV图中的H范围才是0-360,S和V的范围是0-1。

【完整代码】

#include <opencv.hpp>

using namespace cv;

int main()

{
IplImage *src = cvLoadImage("Lena.jpg", 1);//原图  

IplImage *dst_gray = cvCreateImage(cvGetSize(src), src->depth, 1);//灰度图

cvCvtColor(src, dst_gray, CV_BGR2GRAY);//得到灰度图

IplImage *src_image_32 = cvCreateImage(cvGetSize(src), 32, src->nChannels);  //32浮点位的空图,用来承载归一化后的原图

cvConvertScale(src, src_image_32, 1.0 / 255.0, 0);//将原图RGB归一化到0-1之间,因为对原图归一化后得到的是浮点数,因此上面要得到32位浮点空图

IplImage *dst_image = cvCreateImage(cvGetSize(src), 32, src->nChannels); //32位浮点的空图,用来承载转换后的YUV图

cvCvtColor(src_image_32, dst_image, CV_BGR2YUV);//得到YUV图

//新建窗口并显示图片
cvNamedWindow("RGB2YUV", CV_WINDOW_AUTOSIZE);
cvMoveWindow("RGB2YUV", 100, 100);
cvShowImage("RGB2YUV", dst_image);

waitKey(6000);
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ rgb yuv opencv