opencv split vs mixChannels

tid*_*idy 4 opencv image-processing hsv mat

从HSV图像分开色调信道,这里是使用的代码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 );
Run Code Online (Sandbox Code Playgroud)

但我知道split函数也可以这样做:

vector<Mat> chs;
split(hsv, chs);
Mat hue = chs[0];
Run Code Online (Sandbox Code Playgroud)

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

bik*_*z05 7

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


cha*_*pjc 5

保持简单和使用extractChannel,mixChannels为您包装.

cv::Mat hue;
int cn = 0; // hue
cv::extractChannel(hsv, hue, cn);
Run Code Online (Sandbox Code Playgroud)