【问题标题】:Histogram Matching直方图匹配
【发布时间】:2015-10-13 01:59:33
【问题描述】:

我正在使用 calcBackProject 在框架中查找对象,并且它以某种方式很好地扫描了所有框架。但我需要增强它

在我的代码中,我有一个运动检测掩码,并基于它为候选对象(移动的对象可能是目标)生成轮廓

我可以利用它来计算每个轮廓的直方图并将其与目标的直方图相匹配吗?

  • 如何计算每个轮廓的直方图? calcHist 接受掩码,但如何将轮廓作为掩码传递
    -如何搭配?

【问题讨论】:

  • 使用 drawContours 绘制一个填充的轮廓并将其作为蒙版传递。

标签: opencv histogram


【解决方案1】:

将您的轮廓转换为遮罩并在 calcHist 中使用遮罩。
在 C++ 中,它会这样完成:

/**
 * Converts a contour to a binary mask.
 * The parameter mask should be a matrix of type CV_8UC1 with proper
 * size to hold the mask.
 * @param contour The contour to convert.
 * @param mask The Mat where the mask will be written. Must have proper size
 * and type before callign convertContourToMask.
 */
void convertContourToMask( const std::vector<cv::Point>& contour, cv::Mat& mask )
{
    std::vector<std::vector<cv::Point>> contoursVector;
    contoursVector.push_back( contour );
    cv::Scalar white = cv::Scalar(255);
    cv::Scalar black = cv::Scalar(0);
    mask.setTo(black);
    cv::drawContours(mask, contoursVector, -1, white, CV_FILLED);
}

【讨论】:

  • 提示:您可以使用:drawContours(image, vector&lt;vector&lt;Point&gt;&gt; {contour}, -1, Scalar(0, 255, 0), CV_FILLED);。你不需要一个空的hierarchyCV_FILLED-1 更清晰。您不需要将其他参数设置为默认值。
  • 谢谢,我已根据您提出的改进建议更新了我的答案。不过,我会保留时间变量,因为我认为在参数中投入太多会使阅读变得更加困难。但这只是偏好问题。
猜你喜欢
  • 2014-09-24
  • 2018-12-29
  • 2015-10-23
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2019-08-31
  • 2011-02-24
  • 2012-10-15
相关资源
最近更新 更多