学习把RGB(红绿蓝)空间的图像转化为其它空间的图像。
将RGB转化为HSV(色调(H),饱和度(S),明度(V))
将RGB转化为Lab(颜色模型 (Lab) 基于人对颜色的感觉,L表示明度(Luminosity),a表示从洋红色至绿色的范围,b表示从黄色至蓝色的范围)
将RGB转化为YCrCb(其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色)
void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 )
src和dst分别是待转的图像(src)和待转图像转换后的图像(dst);code是一个掩码,表示由src到dst之间是怎么转的,比如是彩色转为灰度,还是彩色转为HSI模式;最后的dstCn表示dst图像的波段数,这个值默认是0,它可以从参数code中推断。
code的模式包括:
CV_BGR2YCrCb:<彩色图像转YCrCb图像>,
CV_BGR2HSV
CV_BGR2Lab
#include "cv.h" // OpenCV 文件头
#include "highgui.h"
#include "cvaux.h"
#include "cxcore.h"
#include "opencv2/opencv.hpp"
#include "opencv2/imgproc.hpp"
#include
#include
using namespace cv;
using namespace std;
int main(int argc, char *argv[])
{
Mat dst_img;
string imageName("C:\\Users\\lidabao\\Desktop\\Lena.bmp"); // 图片在电脑中的绝对地址
Mat bgr_img = imread(imageName.c_str(), IMREAD_COLOR);//读入图片数据
if (bgr_img.empty())
return -1;
namedWindow("image", 0);
imshow("image", bgr_img);
// BGR -> HSV
cvtColor(bgr_img, dst_img, CV_BGR2HSV);
namedWindow("HSV image", 0);
imshow("HSV image", dst_img);
// BGR -> Lab
cvtColor(bgr_img, dst_img, CV_BGR2Lab);
namedWindow("Lab image", 0);
imshow("Lab image", dst_img);
// BGR -> YCrCb
cvtColor(bgr_img, dst_img, CV_BGR2YCrCb);
namedWindow("YCrCb image", 0);
imshow("YCrCb image", dst_img);
waitKey(0);
}
cvtColor(bgr_img, dst_img, CV_BGR2HSV);
cvtColor第一个参数为原图片
第二个参数为目的图片
第三个参数为转化的掩码,表示转化的方向从BGR转到HSV
cvtColor(bgr_img, dst_img, CV_BGR2Lab);
cvtColor第一个参数为原图片
第二个参数为目的图片
第三个参数为转化的掩码,表示转化的方向从BGR转到Lab
cvtColor(bgr_img, dst_img, CV_BGR2YCrCb);
cvtColor第一个参数为原图片
第二个参数为目的图片
第三个参数为转化的掩码,表示转化的方向从BGR转到YCrCb
正确的配置opencv
正确使用cvtColor()函数