根据定义及概念可知,若直接通过cvtColor转换颜色空间,则输出灰度图像为单通道的,此时channels为1.

那么为了获得三通道的灰度图像,则可将三个三通道灰度叠加在一起.

Mat gray;
cvtColor(img, gray, COLOR_BGR2GRAY);
Mat imageB;
vector<Mat> mbgr(3);
mbgr[0] = gray;
mbgr[1] = gray;

mbgr[2] = gray;
merge(mbgr, imageB);
imshow("dst", imageB);
waitKey();

 

思路2:转换两次cvtcolor颜色空间,三通道bgr图像转换为单通道灰度后,再将单通道转换为三通道.

需注意此处颜色空间的转换是不可逆的,也就是说第二次转换颜色空间为三通道并不会将图像转换为三通道彩色图像的原图.

原理可以参考矩阵数组的可逆变换.

cvtColor(img, img, COLOR_BGR2GRAY);
cvtColor(img, img, COLOR_GRAY2BGR);

经验证,以上两种处理方式,对于图像的效果是一致的.从时间效率上来看,优先选第二种

 

Talk is cheap. Show me the code