深刻理解RGB色彩空间与HSI色彩空间的转换关系

本文详细探讨了RGB色彩空间与HSI色彩空间的转换,包括色调、饱和度和亮度的定义,通过空间解析几何推导转换公式,并用C++实现了转换算法。同时,对比了OpenCV的转换结果,分析了不同饱和度算法的差异。
摘要由CSDN通过智能技术生成

一、概要
本文先给出色调、饱和度和亮度的定义,然后将其量化,利用空间解析几何推导出RGB色彩空间与HSI色彩空间的转换关系,并给出实现这一转换的代码,同时给出OpenCV的标准转换算法。
二、色调、饱和度及亮度的定义
在这里插入图片描述
三、RGB色彩空间与HSI色彩空间转换关系的推导
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
四、算法实现及分析
基于以上推导,利用C++实现RGB色彩空间到HSI色彩空间的转换。输入图像如下所示:
在这里插入图片描述
1、强度
利用本文推导的强度计算公式从RGB空间中提取图像的强度,代码如下所示:

#include<iostream>
#include<opencv2/opencv.hpp>
#include<math.h>
using namespace std;
using namespace cv;
int main()
{
   
	Mat src = imread("RGB.jpg");
	imshow("输入图像", src);
	Mat I = Mat::zeros(src.size(), CV_32FC1);
	for (int row = 0; row < src.rows; row++)
	{
   
		for (int col = 0; col < src.cols; col++)
		{
   
			I.at<float>(row, col) = (float)(src.at<Vec3b>(row, col)[0] + src.at<Vec3b>(row, col)[1] + src.at<Vec3b>(row, col)[2]) / 3;
		}
	}
	I.convertTo(I, CV_8UC1);
	imshow("强度(推导)", I);
	waitKey(0);
	system("pause");
	return 0;
}

将上述代码的运行结果与利用OpenCV的API的运行结果进行对比,对比结果如下所示:
在这里插入图片描述
由于输出的是单通道图像,所以显示的效果为灰度图,但依然可以从对比结果中验证推导结果。上图中,左侧是利用OpenCV的API的运行结果,右侧是根据本文推导的强度算法的运行结果。显然,两种方法的运行结果基本一致。
2、饱和度
利用本文推导的饱和度计算公式从RGB空间中提取图像的饱和度,代码如下所示:

#include<iostream>
#include<opencv2/opencv.hpp>
#include<math.h>
using namespace std;
using namespace cv;
int main()
{
   
	Mat src = imread("RGB.jpg");
	imshow("输入图像", src);
	Mat S = Mat::zeros(src.size(), CV_32FC1);
	for (int row = 0; row < src.rows; row++)
	{
   
		for (int col = 0; col < src.cols; col++)
		{
   
			int B_2 = pow(src.at<Vec3b>(row, col)[0], 2);//B^2
			int G_2 = pow(src.at<Vec3b>(row, col)[1], 2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值