【问题标题】:opencv split vs mixChannelsopencv split vs mixChannels
【发布时间】:2014-10-21 08:39:54
【问题描述】:

要从 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];

这样好吗? 如果这些相同,我认为拆分方法更干净。我说的对吗?

【问题讨论】:

  • 您说的非常对,split() 用于将多通道矩阵的所有通道拆分为单通道矩阵。另一方面,如果您只对一个频道感兴趣,您可以使用mixChannels()。因此,您不必像我们使用 split() 那样为其他通道分配内存。
  • 好答案!你可以把它放在回答部分,以便我接受。

标签: opencv image-processing mat hsv


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    保持简单并使用extractChannel,它为您包装了mixChannels

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-26
      • 2015-05-21
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多