彩色图与灰度图的转换关系
Opencv转换函数
void cvtColor( InputArray src, OutputArray dst, int code,int dstCn = 0 );
/*
src 输入的 8-bit,16-bit或 32-bit单倍精度浮点数影像。
dst 输出的8-bit, 16-bit或 32-bit单倍精度浮点数影像。
code 色彩空间转换的模式,该code来实现不同类型的颜色空间转换。
CV_BGR2GRAY表示转换为灰度图,dst需要是单通道图片。
CV_BGR2HSV将图片从RGB空间转换为HSV空间。对于8位图,需要将RGB值归一化到0-1之间。这样得到HSV图中的H范围才是0-360,S和V的范围是0-1。
*/
代码实现
主要就是获取每个像素的R G B的值,然后通过公式计算出灰度值即可。
注意点:
1. 在计算之前,需要对dst初始化,不然无法对空指针赋值。
Mat grayImg = Mat(src.rows, src.cols, CV_8U);
//dst=src//error
2. 像素点RGB值得获取,及灰度值的赋值
Vec3b pix = img.at<Vec3b>(i,j);
uchar B = pix[0]
uchar G = pix[1];
uchar R = pix[2];
grayImg.at<uchar>(i,j) = R * 0.299 + G * 0.587 + B * 0.114;
3. OpenCV对RGB图像数据的存储顺序是BGR。
Reference
如何将真彩色图转换为各种灰度图--原理
【OpenCV】C++如何使RGB图像变为灰度图像-调用opecv库函数实现转换
OpenCV遍历彩色图像、灰度图像的像素值方法--代码实现,像素赋值。