如果在纯白色背景上有一个对象,是否有人知道OpenCV是否提供了从捕获的帧中轻松检测对象的功能?

我正在尝试找到对象(矩形)的角点/中心点。我目前正在做的方式是蛮力(扫描物体的图像)而不准确。我想知道是否有我不知道的功能。

修改详情: 大小与苏打水相同。相机位于物体上方,为其提供2D /矩形感。来自相机的方向/角度是随机的,这是从角点计算的。

它只是一个白色背景,上面有物体(黑色)。拍摄的质量与您希望从Logitech网络摄像头看到的一样。

一旦我得到了角点,我就计算了中心。然后将中心点转换为厘米。

我正在努力关注那些4角的'如何'。您可以使用此图片查看我的强力方法:图片

有帮助吗?

解决方案

已经有一个如何在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}

不是他们正在做的事情的准确音译,但它应该对你有帮助。

其他提示

希望这有帮助,使用矩量法得到黑白图像的质心。

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;
}

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

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

  1. 像以前一样找到角落 - 例如QUOT <!>; <!> CornerHarris QUOT; OpenCV功能

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

  3. 找到图像的瞬间以提供旋转,重心等 - 例如<!> QUOT;矩QUOT <!>; OpenCV功能。 (我没有用过这个)

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

它通常在其他机器视觉库中称为blob分析。我还没有用过opencv。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top