首页 > 编程语言 >C++,OpenCV-颜色模型转换(4)

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

时间:2023-04-06 18:02:23浏览次数:47  
标签:颜色 img 模型 imshow C++ OpenCV result using include

HSV颜色模型

HSV模型

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

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

色调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)_OpenCV_02

HLS颜色模型

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

C++,OpenCV-颜色模型转换(4)_ios_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)_#include_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)_颜色空间_08

标签:颜色,img,模型,imshow,C++,OpenCV,result,using,include
From: https://blog.51cto.com/u_15959862/6173939

相关文章

  • C++中的元编程常用工具
    std::forward : 通常是用于完美转发的,它会将输入的参数原封不动地传递到下一个函数中,这个“原封不动”指的是,如果输入的参数是左值,那么传递给下一个函数的参数的也是左值;如果输入的参数是右值,那么传递给下一个函数的参数的也是右值。std::remove_reference_t : 是一个模板......
  • opencv-python 4.12. 模板匹配
    理论模板匹配是一种在较大图像中搜索和查找模板图像位置的方法。为此,OpenCV附带了一个函数cv.matchTemplate()。它只是在输入图像上滑动模板图像(如在2D卷积中),并比较模板图像下的输入图像的模板和补丁。在OpenCV中实现了几种比较方法。它返回一个灰度图像,其中每个像素表示该像素的......
  • C++实现一个类
    #include<iostream>usingnamespacestd;//定义一个人的类classPerson{private:intage;//年龄floatheight;//身高public://构造函数,初始化年龄和身高Person(intage,floatheight){this->age=age;this->height=h......
  • m基于HMM和博弈模型的LSTM互联网情感词性分类识别matlab仿真
    1.算法描述        传统的情感分析研究大多立足于解决主观性文本的情感分类问题,面向复杂交互式文本的情感演化分析却力所不逮.本文以天涯论坛短文本中文在线评论为研究对象,首先提出一种高效的情感计算框架捕捉在线评论所蕴含的情感倾向;然后将情感计算和博弈论相结合提......
  • 《c++徒步》dll篇
    DLL简介c++中共有两种库:1、LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamiclinklibrary。(这种方式更灵活,写的程序体积小,但是需要.exe和dll同时发布)2、LIB包含函数代码本身,在编译时直接将代码加入程序当中,......
  • C++ MFC中嵌入web网页控件(WebBrowser、WebView2、CEF3)
    1、简介WebBrowser控件最常见的用途之一是向应用程序添加Internet浏览功能。使用IWebBrowser2接口,可以浏览到本地文件系统、网络或万维网上的任何位置。可以使用IWebBrowser2::Navigate方法告知控件要浏览到哪个位置。第一个参数是包含位置名称的字符串。要浏览到本地文件系......
  • OpenCV [c++](图像处理基础示例小程序汇总)
    一、图像读取与显示#include<opencv2/opencv.hpp>#include<iostream>usingnamespacecv;usingnamespacestd;intmain(){ stringpath="Resources/lambo.png";//图片的路径名 Matimg=imread(path);//将图片加载后赋值到图像变量img中//if(path.empty()){......
  • c++ string类的字符在内存的储存位置
    1.数据<=16字节,在当前栈区#include<iostream>#include<stdio.h>#include<stdlib.h>usingnamespacestd;intmain(){stringtemp="123456789012345";//注意长度int*a=(int*)malloc(sizeof(int));intb=0;for(a......
  • 初学C++第一天
    C语言简介:  BCPL->NewB->C->UNIX->Minix->Linux->gcc  C语言诞生于1971~1973年,美国贝尔实验室,肯.汤普逊和丹尼斯.里奇  C语言是专门为了编写操作系统而诞生的语言,天生适合对硬件编程,以运行速度快而著称,而且C语言非常适合编写数据结构和算法  因为C语言出现......
  • 【c&c++】#ifdef __cplusplus extern “C”的作用详解
    extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern"C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因......