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

本文介绍如何使用cvCvtColor函数将RGB颜色空间转换到HSV颜色空间及灰度颜色空间,并提供完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 使用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);	//RGB
cvNamedWindow("HSV", 0);	//HSV
cvShowImage("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);	//RGB
	cvNamedWindow("HSV", 0);	//HSV
	cvShowImage("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,通道数为1
	cvZero(image1);	//清空image_data数据
	//颜色空间转换
	cvCvtColor(image, image1, CV_BGR2GRAY);//CV_BGR2GRAY
	//显示图像
	cvNamedWindow("RGB", 0);	//RGB
	cvNamedWindow("灰度图", 0);	//HSV
	cvShowImage("RGB", image);
	cvShowImage("灰度图", image1);
	cvWaitKey(0);	//message
目 录 第一章 引言 1 1.1 图像质量评价的定义 1 1.2 研究对象 1 1.3 方法分类 2 1.4 研究意义 3 第二章 历史发展和研究现状 4 2.1 基于手工特征提取的图像质量评价 4 2.1.1 基于可视误差的“自底向上”模型 4 2.1.1.1 Daly模型 4 2.1.1.2 Watson’s DCT模型 5 2.1.1.3 存在的问题 5 2.1.2 基于HVS的“自顶向下”模型 5 2.1.2.1 结构相似性方法 6 2.1.2.2 信息论方法 8 2.1.2.3 存在的问题 9 2.2 基于深度学习的图像质量评价 10 2.2.1 CNN模型 10 2.2.2 多任务CNN模型 12 2.2.3 研究重点 15 第三章 图像质量评价数据集和性能指标 16 3.1 图像质量评价数据集简介 16 3.2 图像质量评价模型性能指标 17 第四章 总结与展望 19 4.1 归纳总结 19 4.2 未来展望 19 参考文献 21 第一章 引言 随着现代科技的发展,诸如智能手机,平板电脑和数码相机之类的消费电子产品快速普及,已经产生了大量的数字图像。作为一种更自然的交流方式,图像中的信息相较于文本更加丰富。信息化时代的到来使图像实现了无障碍传输,图像在现代社会工商业的应用越来越广泛和深入,是人们生活中最基本的信息传播手段,也是机器学习的重要信息源。 图像质量是图像系统的核心价值,此外,它也是图像系统技术水平的最高层次。但是,对图像的有损压缩、采集和传输等过程会很容易导致图像质量下降的问题。例如:在拍摄图像过程中,机械系统的抖动、光学系统的聚焦模糊以及电子系统的热噪声等都会造成图像不够清晰;在图像存储和传输过程中,由于庞大的数据量和有限通讯带宽的矛盾,图像需要进行有损压缩编码,这也会导致振铃效应、模糊效应和块效应等图像退化现象的出现。所以,可以说图像降质在图像系统的各个层面都会很频繁地出现,对图像质量作出相应的客观评价是十分重要且有意义的。为了满足用户在各种应用中对图像质量的要求,也便于开发者们维持、控制和强化图像质量,图像质量评价(Image Quality Assessment,IQA)是一种对图像所受到的质量退化进行辨识和量化的
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

17岁boy想当攻城狮

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值