我想獲得一個圖像,其中只有一個區域具有賦予彩色圖像的顏色。只將圖像的一個區域轉換爲灰度
Mat img = imread("lena.jpg");
Rect roi = Rect(100, 100, 300, 300);// only this should be in color in output
Mat img_yuv;
cvtColor(img, img_yuv, CV_RGB2YUV);
vector<Mat> channels(3);
split(img_yuv, channels);
Mat Y = channels[0];
Mat U = channels[1];
Mat V = channels[2];
// create mask
Mat mask = Mat::zeros(Y.size(), Y.type());
rectangle(mask, roi, Scalar(1), CV_FILLED);
// merging channels
channels[0] = Y;
channels[1] = U.mul(mask)+(Scalar::all(1)-mask).mul(Y);
channels[2] = V.mul(mask)+(Scalar::all(1)-mask).mul(Y);
Mat img_yuv_out, img_out;
merge(channels, img_yuv_out);
cvtColor(img_yuv_out, img_out, CV_YUV2RGB);
imshow("masked_color", img_out);
imshow("lena", img);
與上面的opencv代碼在這裏分別是我的輸入和輸出圖像。 。
在它工作正常,但圖像的其餘部分看起來並不像一個灰度圖像(不完全一樣,我們仍然有3個渠道的ROI
當你合併,你想分配給0,1,1或0,1,2? –
@RetiredNinja我錯了一個錯字,更新了帖子 – SPV