100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 使用Opencv将RGB颜色空间转换到HSV颜色空间/灰度图

使用Opencv将RGB颜色空间转换到HSV颜色空间/灰度图

时间:2024-03-05 08:31:24

相关推荐

使用Opencv将RGB颜色空间转换到HSV颜色空间/灰度图

一. 使用cvCvtColor函数将RGB颜色空间转换到HSV颜色空间

所需函数:

1.cvCvtColor

函数功能:颜色空间转换

函数原型:

void cvCvtColor( const CvArr* src, CvArr* dst, int code );

参数介绍:

const CvArr* src:输入图像

CvArr* dst: 输出图像(输出图像必须和输入图像的size,颜色位深度,通道一致)

int code:要转换的颜色空间,可取自宏:CV_BGR2GRAY表示转换为灰度图,CV_BGR2HSV将图片从RGB空间转换为HSV空间,其中当code选用CV_BGR2GRAY时,dst需要是单通道图片。当code选用CV_BGR2HSV时,对于8位图,需要将RGB值(RGB三色叠加)归一化到0-1之间。这样得到HSV图中的H范围才是0-360,S和V的范围是0-1。

2.开始编写代码

开始编写代码之前需要准备一张用于实验的图像:

如有需要自行保存,JPG格式!

首先完成RGB到HSV颜色空间的转换功能,代码如下:

2.1 打开图像

//加载图像到内存IplImage *image = cvLoadImage("D:\\1.jpg");//将图像加载到内存if (image == NULL){//判断是否加载成功printf("图像文件打开失败");}

2.2 创建一张空白图像用于存储图像转换成HSV颜色空间后的图像

//创建一张空白图像用于存储转换成HSV颜色空间后的图像IplImage *image1 = cvCreateImage(cvSize(image->width, image->height), image->depth, image->nChannels);//注意图像必须和输入图像的size,颜色位深度,通道一致cvZero(image1);//清空image_data数据

2.3 颜色空间转换

//颜色空间转换cvCvtColor(image, image1, CV_BGR2HSV);//CV_BGR2HSV

2.4 显示图像

//显示图像cvNamedWindow("RGB", 0);//RGBcvNamedWindow("HSV", 0);//HSVcvShowImage("RGB", image);cvShowImage("HSV", image1);cvWaitKey(0);//message

运行结果:

完整代码:

//加载图像到内存IplImage *image = cvLoadImage("D:\\1.jpg");//将图像加载到内存if (image == NULL){//判断是否加载成功printf("图像文件打开失败");}//创建一张空白图像用于存储转换成HSV颜色空间后的图像IplImage *image1 = cvCreateImage(cvSize(image->width, image->height), image->depth, image->nChannels);//注意图像必须和输入图像的size,颜色位深度,通道一致cvZero(image1);//清空image_data数据//颜色空间转换cvCvtColor(image, image1, CV_BGR2HSV);//CV_BGR2HSV//显示图像cvNamedWindow("RGB", 0);//RGBcvNamedWindow("HSV", 0);//HSVcvShowImage("RGB", image);cvShowImage("HSV", image1);cvWaitKey(0);//message

cvCvtColor转换RGB到HSV使用的算法公式如下:

相关链接: RGB颜色空间、色调、饱和度、亮度、HSV颜色空间详解

二. 使用cvCvtColor函数将RGB颜色空间转换到灰度颜色空间

上面已经介绍过cvCvtColor函数所以直接开始编写代码

其实代码非常简单,我们可以复用上面的代码只需要简单的修改一下cvCreateImage的最后两个参数和cvCvtColor最后一个code参数

IplImage *image1 = cvCreateImage(cvSize(image->width, image->height), 8, 1);//注意图像必须和输入图像的size,灰度图属于单通道所以颜色深度为8,通道数为1

cvCvtColor(image, image1, CV_BGR2GRAY);//CV_BGR2GRAY

运行结果:

完整代码:

//加载图像到内存IplImage *image = cvLoadImage("D:\\1.jpg");//将图像加载到内存if (image == NULL){//判断是否加载成功printf("图像文件打开失败");}//创建一张空白图像用于存储转换成灰度颜色空间后的图像IplImage *image1 = cvCreateImage(cvSize(image->width, image->height), 8, 1);//注意图像必须和输入图像的size,灰度图属于单通道所以颜色深度为8,通道数为1cvZero(image1);//清空image_data数据//颜色空间转换cvCvtColor(image, image1, CV_BGR2GRAY);//CV_BGR2GRAY//显示图像cvNamedWindow("RGB", 0);//RGBcvNamedWindow("灰度图", 0);//HSVcvShowImage("RGB", image);cvShowImage("灰度图", image1);cvWaitKey(0);//message

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。