OpenCV - 测量对象的“增长”

时间:2012-02-24 02:52:36

标签: c opencv

我想请一些关于OpenCV的帮助(我目前是使用OpenCV的初学者)。

我打算测量一个物体在两帧之间的增长或移动。

例如:

                                          _  _
         =  =                          =        =
      =        =                     =            =
     =          =                   =              =
     =          =                   =              =
      =        =                     =            =
         =  =                          =        =
                                          ~  ~                

第一帧包含一个带有白色背景的黑色圆圈。

第二帧包含一个较大的圆圈,背景为白色。

我想要做的是获取圆圈的坐标(我不确定OpenCV中可用的哪些功能允许我分割圆圈并检索它的坐标)。然后减去坐标,以便我可以测量圆的增长。

我尝试了一些教程,但未能找到任何关于分割对象(如圆圈)的讨论,然后将其坐标打印或写入文件。

是否可以使用OpenCV执行此类操作,还是需要其他一些软件解决方案?

谢谢大家。

1 个答案:

答案 0 :(得分:1)

在OpenCV中,您可以:

  1. 使用特征检测算法(如Canny算法)
  2. 提取边缘
  3. 从此边缘图像中,您可以使用CV的蛇形算法cvSnakeImage(),它将图像作为输入并计算一组点
  4. 使用这组点作为函数cv::minEnclosingCircle()的输入,它将返回圆的直径
  5. 重复下一张图片并比较cirlces的大小
  6. 功能检测文档:http://opencv.willowgarage.com/documentation/feature_detection.html 结构/形状描述符doc:http://opencv.willowgarage.com/documentation/cpp/structural_analysis_and_shape_descriptors.html

    也许你也可以使用光流(虽然我不熟悉它,所以我不确定)。

    修改(回复评论):

    函数cvMinEnclosingCircle()返回“给定2D点集的最小区域的外接圆”(来自OpenCV doc) - 这意味着2D点集可以表示任何形状,而不仅仅是圆形。如果你知道你正在比较同一个物体的不同尺度,那么这个尺度是有意义的(因为你的物体的所有部分会同时增长或缩小,因此“推”或“收缩”外接圆圈。)

    但实际上有一种更简单的方法:比较每张图像中的黑色像素数,它们代表区域。

    或者,您可能有兴趣使用另一个专门用于细分的库,例如ITK。