根據定義及概念可知,若直接通過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);
經驗證,以上兩種處理方式,對于圖像的效果是一緻的.從時間效率上來看,優先選第二種