This question already has an answer here:
Separate hsv channels in opencv

(1个答案)


2年前关闭。




我有一张Mat类型的图像,试图将其分成单独的波段,以便可以分别调整每个波段中的像素值。当我编写代码时,会弹出错误消息“没有匹配的函数调用'cvSplit'”。
Mat image = imread(file,1);
Mat rBand, gBand,bBand;
cvSplit(image, bBand, gBand, rBand, NULL);
imshow("red", rBand);
imshow("blue", bBand);
imshow("green",gBand);

最佳答案

如果创建时未说明,则垫不允许下标运算符。因此,大多数会创建一个Mat来表示其中的带数,以便随后将其拆分。这意味着Bands[0],Bands[1],Bands[2]都是单个 channel ,并且都是灰度的。未获取原始图像必须使用merge函数合并 channel 。

Mat image = imread(file,1);
Mat Bands[3],merged;
split(image, Bands);
vector<Mat> channels = {Bands[0],Bands[1],Bands[2]};
merge(channels,merged);
imshow("red", Bands[2]);
imshow("blue", Bands[0]);
imshow("green",Bands[1]);
imshow("merged",merged);

10-08 12:05