OpenCV对象检测-中心点
image-processing
object-detection
opencv
5
0

给定一个纯白色背景上的对象,有人知道OpenCV是否提供了可以轻松地从捕获的帧中检测对象的功能吗?

我正在尝试定位对象(矩形)的角/中心点。我当前的操作方式是蛮力(扫描对象的图像)并且不准确。我想知道是否存在我不知道的功能。

编辑详细信息 :大小与小汽水罐差不多。相机位于对象上方,以使其具有2D /矩形感。相机的方向/角度是随机的,这是根据拐角点计算得出的。

它只是一个白色背景,上面有对象(黑色)。拍摄质量与您期望从Logitech网络摄像头看到的图像有关。

一旦获得角点,就可以计算中心。然后将中心点转换为厘米。

我正在尝试着重于“如何”获得这四个角。你可以看到我的蛮力方法与此图像: 图片

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

已经有一个有关如何在OpenCV中进行矩形检测的示例(请参见samples / squares.c),实际上非常简单。

这是他们使用的粗略算法:

0. rectangles <- {}
1. image <- load image
2. for every channel:
2.1  image_canny <- apply canny edge detector to this channel
2.2  for threshold in bunch_of_increasing_thresholds:
2.2.1   image_thresholds[threshold] <- apply threshold to this channel
2.3  for each contour found in {image_canny} U image_thresholds:
2.3.1   Approximate contour with polygons
2.3.2   if the approximation has four corners and the angles are close to 90 degrees.
2.3.2.1    rectangles <- rectangles U {contour}

他们所做的并不是确切的音译,但它可以为您提供帮助。

收藏
评论

OpenCV具有大量可以帮助您实现此目标的功能。如果使用该语言进行编程,请下载Emgu.CV以将C#.NET包装到该库中。

获得所需内容的一些方法:

  1. 像以前一样找到角点-例如“ CornerHarris” OpenCV函数

  2. 阈值图像并计算重心-请参阅http://www.roborealm.com/help/Center%20of%20Gravity.php ...这是我要使用的方法。您甚至可以在COG例程中执行阈值设置。即cog_x + = * imagePtr <128吗? 255:0;

  3. 找到图像的力矩以给出旋转,重心等-例如“ Moments” OpenCV功能。 (我没有使用过)

  4. (编辑)AForge.NET库具有角点检测功能以及示例项目(MotionDetector)和用于连接网络摄像头的库。我认为,如果您使用的是Windows和.NET,这将是最简单的方法。

收藏
评论

希望这会有所帮助,使用矩量法来获取黑白图像的质心。

cv::Point getCentroid(cv::Mat img)
{
    cv::Point Coord;
    cv::Moments mm = cv::moments(img,false);
    double moment10 = mm.m10;
    double moment01 = mm.m01;
    double moment00 = mm.m00;
    Coord.x = int(moment10 / moment00);
    Coord.y = int(moment01 / moment00);
    return Coord;
}
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号