本篇博文用于记录利用 OpenCV 实现图像的各色彩模型转换与模型分量提取的方法。
图像色彩模型的转换
OpenCV3.4.0 直接提供了图像色彩模型相互转化的函数
void cv::cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );
输入参数 src, dst 为输入色彩模型转化前后的图像,一般为 cv::Mat 数据类型。 函数支持原位操作,即 src 和 dst 可以是同一个对象。
输入参数 code 指明了色彩模型的转化方法,可以参考枚举类型 cv::ColorConversionCodes 。常用的色彩类型转化有 COLOR_BGR2GRAY、COLOR_BGR2XYZ、COLOR_BGR2YCrCb、COLOR_BGR2HSV 及其逆转换等等。
色彩通道的分离与融合
cv::Mat 的通道分离在前文中已经介绍,这里稍微简述加以记录。
//通道分离函数
void cv::split(cv::Mat &muiltChannalMat, std::vector<cv::Mat> channalsMaps);
//muiltChannalMat为多通道Mat,channalsMaps为单通道Mat向量,多通道与单通道Mat的规模一样,
//channalsMaps共有muiltChannalMat.channals个元素
//通道整合函数,参数意义同split
void cv::merge(std::vector<cv::Mat> channalsMaps, cv::Mat &muiltChannalMat);
结合模型转化、通道分离与融合可以轻松实现目标图像特定色彩分量的提取与重组。
图像在不同色彩分量下的统计直方图可以通过opencv的统计函数 cv::calcHist 进行求取,函数的使用在这里不进行阐述。
不同色彩分量下的直方图数据可以作为目标图像的特征描述向量,具有很强的鲁棒性。直方图结合SVM分类器在嵌入式环境、需求简单的工业应用范围中可以快速、稳定地实现图像的简单分类。