【问题标题】:How to detect edge of object using OpenCV如何使用 OpenCV 检测物体的边缘
【发布时间】:2019-09-18 11:23:05
【问题描述】:

我正在尝试使用 OpenCV 来测量灯丝(用于 3D 打印的塑料材料)的尺寸

我要做的是测量灯丝尺寸(用于 3D 打印的塑料材料)。这个想法是我使用 LED 面板照亮灯丝,然后用相机拍摄图像,预处理图像,应用边缘检测并计算它的大小。大多数细丝由一种颜色制成,易于预处理并获得良好的效果。

问题出在透明灯丝上。我无法获得有用的结果。我想寻求一点帮助,或者是否有人可以为我提供正确的方向。我已经尝试将图像裁剪到比灯丝高一点的高度,宽度只有几个像素,并使用这些图像中的像素数计算大小,但这效果不佳。所以现在我在这里并尝试通过边缘检测来做到这一点

  • 适用于单色灯丝
  • 不适用于透明灯丝

下面的代码适用于普通灯丝,问题是当我尝试将它用于透明灯丝时。我尝试过调整 Canny 函数的阈值。我尝试过不同的色彩空间。但我无法得到结果。

可能有助于理解的图片: https://imgur.com/gallery/CIv7fxY

image = cv.imread("../images/img_fil_2.PNG")  # load image

gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)  # convert image to grayscale

edges = cv.Canny(gray, 100, 200)  # detect edges of image

【问题讨论】:

    标签: python opencv computer-vision


    【解决方案1】:

    您可以假设图像是在相同条件下拍摄的。

    您的主要问题是透明灯丝中的反射被检测为边缘。但是,由于图像比较简单,没有任何其他边缘,您可以简单地取上边缘和下边缘,并测量它们之间的距离。

    这样做的一个简单方法是取2条垂直线(例如图像边),找到与该线相交的边缘(基本上遍历图像中的一列并找到边缘像素),并连接最高点和最低点形成灯丝的边缘。这也消除了灯丝中的曲率,我认为您的应用不需要。

    您可能希望使用 3 或 4 条垂直线,以确保稳健性。

    【讨论】:

      猜你喜欢
      • 2013-07-01
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多