数字图像基本OP:OpenCV中的色彩空间转换
色彩空间是一种使用一组颜色成分表示颜色的抽象数学模型,如RGB
,HSI
等。OpenCV
提供了cvtColor
函数来将一个图像由一种色彩空间表示转换成另一种色彩空间表示。
1. 相关API介绍:
CV_EXPORTS_W void cvtColor( InputArray src, OutputArray dst, int code, int dstCn=0 );
src
是源图像,可以是8位无符号或16位无符号数或单精度浮点数。dst
是输出图像,与src
具有相同大小和深度。code
是色彩空间转换类型,常用参数有COLOR_BGR2GRAY = 6
彩色到灰度,COLOR_GRAY2BGR = 8
灰度到彩色,COLOR_BGR2HSV = 40
BGR到HSV,COLOR_HSV2BGR = 54
HSV到 BGR,更加详细的色彩空间转换类型可以见:cv::ColorConversionCodes。
该函数可以将输入图像从一种颜色空间转换为另一种颜色空间。在从RGB颜色空间转换的情况下,应明确指定通道的顺序(RGB或BGR)。
这里要注意的是OpenCV
中的默认颜色格式通常称为RGB,但实际上是BGR(字节是相反的)。因此,标准(24位)彩色图像中的第一个字节将是8位蓝色分量,第二个字节将是绿色分量,第三个字节是红色分量。第四,第五和第六个字节将是第二个像素(蓝色,然后是绿色,然后是红色),依此类推。
2.代码实践
#include<iostream>
#include<opencv2\opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char**argv)
{
Mat input = imread("test_images/opencv.jpg",1);
namedWindow("input", CV_WINDOW_NORMAL);
imshow("input", input);
Mat gray, hsv;
cvtColor(input, gray, COLOR_BGR2GRAY);
cvtColor(input, hsv, COLOR_BGR2HSV);
imshow("gray", gray);
imshow("hsv", hsv);
waitKey(0);
return 0;
}