要从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 );
但我知道split
函数也可以这样做:
vector<Mat> chs;
split(hsv, chs);
Mat hue = chs[0];
这样可以吗?如果这些都是一样的,我认为拆分的方法更干净。我说得对吗?
您说得很对,split()
用于将多通道矩阵的所有通道拆分为单通道矩阵。另一方面,如果您只对一个频道感兴趣,则可以使用mixChannels()
。所以你没有';不必像使用split()
那样为其他通道分配内存。
保持简单并使用extractChannel
,它为您封装了mixChannels
。
cv::Mat hue;
int cn = 0; // hue
cv::extractChannel(hsv, hue, cn);