【问题标题】:Various thresholds各种阈值
【发布时间】:2013-07-04 20:54:31
【问题描述】:

我正在尝试通过一个网络摄像头同时跟踪多个具有不同颜色的对象。现在我可以用单一阈值对单一颜色做到这一点:

IplImage* GetThresholdedImage(IplImage* imgHSV)
{       
    IplImage* imgThresh=cvCreateImage(cvGetSize(imgHSV),IPL_DEPTH_8U, 1);
    cvInRangeS(imgHSV, cvScalar(170,160,60), cvScalar(180,2556,256), imgThresh); 
    return imgThresh;
}

我正在寻找一些提示来做各种阈值。如果可能的话,它需要多少个窗口?我需要为不同的颜色分配不同的窗口吗?

【问题讨论】:

  • 最简单的方法是为您希望跟踪的每种颜色创建一个阈值图像。您可以修改 GetThresholdedImage() 以采用 cvScalar 参数作为上限和下限,然后为每个对象调用一次。
  • 你能具体一点吗?
  • 错误:函数“cvScalar”不是类型名?
  • 查看我的编辑。类型名称是CvScalar

标签: image opencv tracking


【解决方案1】:

最简单的方法是为您希望跟踪的每种颜色创建一个阈值图像。您可以修改函数以将它们作为参数,而不是对阈值范围进行硬编码。这使您可以将函数重新用于不同的对象。

修改后的函数可能如下所示:

IplImage* GetThresholdedImage(IplImage* imgHSV, CvScalar lower, CvScalar upper)
{       
    IplImage* imgThresh=cvCreateImage(cvGetSize(imgHSV),IPL_DEPTH_8U, 1);
    cvInRangeS(imgHSV, lower, upper, imgThresh); 
    return imgThresh;
}

然后对不同的对象使用不同的阈值来调用它:

IplImage* hsv;    /* Already initialized*/

/* Set thresholds for blue and green objects as an example. */
/*Obviously, set these to be whatever is necessary. */
CvScalar blue_lower = cvScalar(110,60,10);
CvScalar blue_upper = cvScalar(120,256,256);
CvScalar green_lower = cvScalar(40,60,10);
CvScalar green_upper = cvScalar(71,256,256);

/* Get the images thresholded for blue and green. */
IplImage* blue_mask = GetThresholdedImage(hsv, blue_lower, blue_upper);
IplImage* green_mask = GetThresholdedImage(hsv, green_lower, green_upper);

【讨论】:

    猜你喜欢
    • 2014-02-24
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多