C++,OpenCV-颜色模型转换(4)

奋斗吧
奋斗吧
擅长邻域:未填写

标签: C++ OpenCV-颜色模型转换(4) 博客 51CTO博客

2023-04-06 18:23:41 109浏览

C++,OpenCV-颜色模型转换(4),HSV颜色模型HSV模型HSV(Hue,Saturation,Value)根据颜色直观特性创建的一种颜色空间,也称六角锥体模型(HexconeModel),参数分别为色调(H),饱和度(S),明度(V)色调H用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,紫色为300°;饱和度S饱和度S表

HSV颜色模型

HSV模型

HSV(Hue, Saturation,Value)根据颜色直观特性创建的一种颜色空间,也称六角锥体模型(Hexcone Model),参数分别为色调(H),饱和度(S),明度(V)

C++,OpenCV-颜色模型转换(4)_ios

色调H

用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,紫色为300°;

饱和度S

饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。

明度V

明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)

取值范围

HSV颜色空间规定,H:0-360,S:0-1,V:0-1 opencv中的HSV范围,H:0-179,S:0-255,V:0-255

//split
#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() 
{
	Mat  img = imread("mm.jpg");
	imshow("img", img);
	Mat  result;
	cvtColor(img, result, COLOR_BGR2HSV);
	imshow("result", result);
	//分割
	vector<Mat> hsv;
	split(result, hsv);
	imshow("H", hsv[0]);
	imshow("S", hsv[1]);
	imshow("V", hsv[2]);
	waitKey(0);
	return 0;
}

C++,OpenCV-颜色模型转换(4)_#include_02

HLS颜色模型

HLS颜色空间,三个分量分别是色调(H)、亮度(L)、饱和度(S)

C++,OpenCV-颜色模型转换(4)_OpenCV_03

上图种可以看出,固定一个颜色(H),那么随着饱和度(S,Chroma)的增加,颜色越来越深

取值范围

C++,OpenCV-颜色模型转换(4)_OpenCV_04

#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() 
{
	Mat  img = imread("mm.jpg");
	imshow("img", img);
	Mat  result;
	cvtColor(img, result, COLOR_BGR2HLS);
	imshow("result", result);
	waitKey(0);
	return 0;
}

C++,OpenCV-颜色模型转换(4)_颜色空间_05

LAB颜色模型

LAB颜色组成

  • L- 亮度(光强)
  • a - 颜色组成部分,从绿色 到 品红;
  • b - 颜色组成部分,从 蓝色 到 黄色;

C++,OpenCV-颜色模型转换(4)_OpenCV_06

LAB颜色空间与RGB 颜色空间有着很大的不同。 在RGB颜色空间中, 色彩信息吧分为R、G、B三个空间,但它们都包含着亮度信息。与其不同,Lab颜色空间 L通道与颜色通道不想管,仅仅对亮度信息编码。 其他两个通道对颜色进行编码。

LAB特性

  • 颜色感知统一,与我们感知色彩近似;
  • 不依赖于对摄像和显示设备;
  • 在Adobe Photoshop中被广泛是使用;

通过复杂的转换方程从RGB空间进行相互转换

#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int WinMain()
{
	Mat  img = imread("mm.jpg");
	imshow("img", img);
	Mat  result;
	cvtColor(img, result, COLOR_BGR2Lab);
	imshow("result", result);
	waitKey(0);
	return 0;
}

YCrCb颜色模型

YCbCr有的时候会被写作:YCBCR,是色彩空间的一种,通常会用于影片中的影像连续处理,或是数字摄影系统中。Y为颜色的亮度(luma)成分、而CB和CR则为蓝色和红色的浓度偏移量成分

YCrCb颜色组成

YCrCb颜色空间是从RGB颜色空间推导出来的,具有以下三个组成部分:

  • Y - 亮度部分,是通过伽马校正后的RGB获取;
  • Cr = R - Y (反映了 R与Y的偏差)
  • Cb = B - Y (反映了B与Y的偏差)

YCrcb特性

  • 将亮度和色彩成分分离到不同的通道;
  • 在电视信息压缩传输中(Cr,Cb被降采样)被广泛使用;
  • 与设想和显示设备有关系;
#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int WinMain()
{
	Mat  img = imread("mm.jpg");
	imshow("img", img);
	Mat  result;
	cvtColor(img, result, COLOR_BGR2YCrCb);
	imshow("result", result);
	waitKey(0);
	return 0;
}

C++,OpenCV-颜色模型转换(4)_#include_07

opencv颜色模型转换

#include <iostream>
#include <vector>
#include <string>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
class CvtColor 
{
public:
	CvtColor(string filename) :mat(imread(filename)) {}
	void Show(string wname) 
	{
		imshow(wname, mat);
		cv::moveWindow(wname, 600, 100);		//移动wname窗口
	}
	void TransmitShow(string wname, int type) 
	{
		Mat result;
		cvtColor(mat, result, type);
		imshow(wname, result);
	}
private:
	Mat mat;
};

int WinMain()
{
	CvtColor* pC = new CvtColor("mm.jpg");
	pC->Show("原图像");
	pC->TransmitShow("hsv", COLOR_BGR2HSV);
	pC->TransmitShow("灰度", COLOR_BGR2GRAY);
	pC->TransmitShow("Lab", COLOR_BGR2Lab);
	pC->TransmitShow("YCrcb", COLOR_BGR2YCrCb);
	pC->TransmitShow("HLS", COLOR_BGR2HLS);
	waitKey(0);
	return 0;
}

C++,OpenCV-颜色模型转换(4)_ios_08

好博客就要一起分享哦!分享海报

此处可发布评论

评论(0展开评论

暂无评论,快来写一下吧

展开评论

您可能感兴趣的博客

客服QQ 1913284695