【问题标题】:Detect bullet holes on the target image如何检测目标上的弹孔
【发布时间】:2016-01-24 02:37:33
【问题描述】:

我想知道如何使用 Python 和 OpenCV 检测目标上的弹孔。

我无法在它们周围绘制轮廓。到目前为止,我已经应用了一个阈值,我得到了以下结果(阈值和二进制 AND 之后的图像):

这是原图:

我不知道应该采用哪种方法来检测弹孔并相应地计算分数。

【问题讨论】:

  • 你考虑过特征检测吗?
  • 我不知道是不是这样,但是如果图片始终从几乎相同的角度拍摄,您可以考虑从干净的目标图像中减去,它会给您一个更干净的要处理的图像

标签: python opencv image-processing


【解决方案1】:

您可以简单地使用一种非常简单的分割技术,称为Color Segmentation,您可以在其中对给定的 RGB 图像进行阈值化以获得二进制图像:

img = cv2.imread('/Users/anmoluppal/Desktop/cAMDX.jpg')

img_thresholded = cv2.inRange(img, (60, 60, 60), (140, 140, 140))

二值图像的噪声可以通过对二值图像的开运算来去除:

kernel = np.ones((10,10),np.uint8)
opening = cv2.morphologyEx(img_thresholded, cv2.MORPH_OPEN, kernel)

现在你对弹孔有了一些清晰的了解,最后一部分是找到这些轮廓并在它们周围画一些圆形/矩形以突出前景区域:

contours, hierarchy = cv2.findContours(opening.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
print len(contours)

for contour in contours:
    (x,y),radius = cv2.minEnclosingCircle(contour)
    center = (int(x),int(y))
    radius = int(radius)
    cv2.circle(img,center,radius,(0,255,0),2)
    # labelling the circles around the centers, in no particular order.
    position = (center[0] - 10, center[1] + 10)
    text_color = (0, 0, 255)
    cv2.putText(img, str(i + 1), position, cv2.FONT_HERSHEY_SIMPLEX, 1, text_color, 3)

【讨论】:

  • 这很棒。有什么方法可以标记这些圈子吗?
  • 已编辑,@varsha_holla
  • 但是如果我在照片中也有已知长度的物体(参考pyimagesearch.com/2016/03/28/…),我能否读取镜头组的大小以供参考?在这种情况下,测量镜头#2 和#6 之间的距离,但必须自动识别相距最远的镜头。
猜你喜欢
  • 2017-03-29
  • 2021-05-13
  • 2016-03-26
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 2012-09-01
  • 2018-11-19
  • 1970-01-01
相关资源
最近更新 更多