opencv split vs mixChannels

时间:2014-10-21 08:39:55

标签: opencv image-processing mat hsv

要将色调频道与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];

可以吗? 如果这些是相同的,我认为拆分方法更干净。我是对的吗?

2 个答案:

答案 0 :(得分:7)

你非常正确,split()用于将多通道矩阵的所有通道分成单通道矩阵。另一方面,如果您只对一个频道感兴趣,可以使用mixChannels()。因此,您不必像使用split()那样为其他渠道分配内存。

答案 1 :(得分:5)

保持简单,并使用extractChannel,为您包裹mixChannels

cv::Mat hue;
int cn = 0; // hue
cv::extractChannel(hsv, hue, cn);