要将色调频道与HSV图像分开,here是使用mixChannels
功能的代码:
/// Transform it to HSV
cvtColor( src, hsv, CV_BGR2HSV );
/// Use only the Hue value
hue.create( hsv.size(), hsv.depth() );
int ch[] = { 0, 0 };
mixChannels( &hsv, 1, &hue, 1, ch, 1 );
但我知道split
函数也可以这样做:
vector<Mat> chs;
split(hsv, chs);
Mat hue = chs[0];
可以吗? 如果这些是相同的,我认为拆分方法更干净。我是对的吗?
答案 0 :(得分:7)
你非常正确,split()
用于将多通道矩阵的所有通道分成单通道矩阵。另一方面,如果您只对一个频道感兴趣,可以使用mixChannels()
。因此,您不必像使用split()
那样为其他渠道分配内存。
答案 1 :(得分:5)
保持简单,并使用extractChannel
,为您包裹mixChannels
。
cv::Mat hue;
int cn = 0; // hue
cv::extractChannel(hsv, hue, cn);