C++,OpenCV-颜色模型转换(4)
标签: C++ OpenCV-颜色模型转换(4) 博客 51CTO博客
2023-04-06 18:23:41 109浏览
HSV颜色模型
HSV模型
HSV(Hue, Saturation,Value)根据颜色直观特性创建的一种颜色空间,也称六角锥体模型(Hexcone Model),参数分别为色调(H),饱和度(S),明度(V)
色调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;
}
HLS颜色模型
HLS颜色空间,三个分量分别是色调(H)、亮度(L)、饱和度(S)
上图种可以看出,固定一个颜色(H),那么随着饱和度(S,Chroma)的增加,颜色越来越深
取值范围
#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;
}
LAB颜色模型
LAB颜色组成
- L- 亮度(光强)
- a - 颜色组成部分,从绿色 到 品红;
- b - 颜色组成部分,从 蓝色 到 黄色;
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;
}
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;
}
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
展开评论