【问题标题】:Python OpenCV - Trouble detecting tiny "holes" (circles)Python OpenCV - 无法检测到微小的“洞”(圆圈)
【发布时间】:2013-11-12 16:38:46
【问题描述】:

我正在尝试检测绘图中的“洞”,也就是说,它们不是圆形,它们的大小不同。图像总是黑白的。为了解决这个问题,我从 Python 文档中举了一个例子:

import cv2
from cv2 import *
import numpy as np

img = cv2.imread('hole_test.jpg',0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

circles = cv2.HoughCircles(img,cv2.cv.CV_HOUGH_GRADIENT,1,5,param1=200,param2=100,minRadius=0,maxRadius=0)

circles = np.uint16(np.around(circles))
for i in circles[0,:]:
    # pinpoint hole
    cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)     
cv2.imshow('holes detected',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()

检测到的漏洞很少而且相差甚远。我可以做些什么来提高这个例子的准确性,或者这不是实现这一目标的最佳方法吗?

这是一个示例图片,只是为了显示我想要找到的各种大小/形状的“洞”。

根据要求提供示例 2

【问题讨论】:

  • 模式识别可能会在这方面发挥作用,你试过了吗?
  • 您的任何图像中是否包含您想要避免检测到的不是洞的东西?
  • 也许您可以发布包含线条网格的图像,因为对于给定的图像,它看起来就像检测任何不是黑色的东西一样简单
  • 你也可能想看看@matlab 实现(mathworks.com/matlabcentral/fileexchange/…)。结果@i.stack.imgur.com/J9rQm.jpg。通过一些调整和耐心,非常好的准确性似乎是可能的
  • 您尝试过基于轮廓的方法吗?只需删除面积大于某个阈值的所有轮廓,只保留孔

标签: python opencv numpy image-recognition


【解决方案1】:

代码

import cv2
import numpy as np

im = cv2.imread('holes2.jpg')

gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
gray=cv2.threshold(gray,20,255,cv2.THRESH_BINARY)[1]
cv2.imshow('gray',gray)

contours,hierarchy = cv2.findContours(gray,cv2.RETR_LIST ,cv2.CHAIN_APPROX_SIMPLE   )

for cnt in contours:
    area = cv2.contourArea(cnt)
    if area<400:
        cv2.drawContours(im,[cnt],0,(255,0,0),2)

cv2.imshow('im',im)
cv2.waitKey()

【讨论】:

  • 完美,我可以继续完成剩下的任务了。感谢您提供此示例以及您的所有努力。
猜你喜欢
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
相关资源
最近更新 更多