如何使用OpenCV检测对象的边缘

问题描述 投票:1回答:1

我正在尝试使用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个回答
0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.