【问题标题】:Detect object with openCV and python用openCV和python检测对象
【发布时间】:2013-01-24 12:18:07
【问题描述】:

我正在尝试使用 OpenCV 和 Python 检测下图中的白点。

我尝试使用函数 cv2.HoughCircles 但没有任何成功。

我需要使用其他方法吗?

这是我的代码:

import cv2, cv
import numpy as np
import sys

if len(sys.argv)>1:
    filename = sys.argv[1]
else:
    filename = 'p.png'

img_gray = cv2.imread(filename,cv2.CV_LOAD_IMAGE_GRAYSCALE)

if img_gray==None:
    print "cannot open ",filename

else:
    img = cv2.GaussianBlur(img_gray, (0,0), 2)
    cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
    circles = cv2.HoughCircles(img,cv2.cv.CV_HOUGH_GRADIENT,4,10,param1=200,param2=100,minRadius=3,maxRadius=100)
if circles:
    circles = np.uint16(np.around(circles))
    for i in circles[0,:]:
        cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),1) 
        cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)   

cv2.imshow('detected circles',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()

【问题讨论】:

  • 图片边框周围有很多白点。你能澄清你想找到哪些点吗?也许靠近中心的那些根本不是点?

标签: python image-processing opencv object-detection


【解决方案1】:

如果您可以在 OpenCV 中重现形态重建,则可以轻松构建 h-dome 变换,从而显着简化任务。否则,高斯滤波的简单阈值也可能就足够了。

Binarize[FillingTransform[GaussianFilter[f, 2], 0.4, Padding -> 1]]

在上面的代码中进行了高斯滤波,以有效抑制输入边界周围的噪声,否则在 h-dome 变换后会保留。

接下来是高斯滤波后的简单阈值 (Binarize[GaussianFilter[f, 2], 0.5]) 以及使用 Kapur 阈值方法直接二值化给出的另一个结果(参见论文“灰度图像阈值的新方法使用直方图的熵”(这不再是一种新方法,它是从 1985 年开始的)):

上面的右图在整个边界上都有很多小点(在这个图像分辨率下看不到),但是是全自动的。从这 3 个选项中,只有第二个已经存在于 OpenCV 中。

【讨论】:

    【解决方案2】:

    我认为中值过滤器会改善您的形象。尝试使用一些内核,3x3 或 7x7。然后,一些(本地)阈值算法将为您提供形状。您可以使用 HoughCircles,也可以只查找轮廓并检查它们的圆度。

    【讨论】:

      【解决方案3】:

      使用合适的阈值技术将图像转换为二值图像(Otsu 可能会有所帮助)。然后使用腐蚀之类的形态学操作使圆变小,然后您就可以轻松找到它们的中心。

      【讨论】:

      • Otsu 在这里会给出一个非常糟糕的结果,你可以自己测试一下,或者至少看看图像的直方图(提示:它是单峰的)。
      • 是的,也许你是对的。我过去做过类似的事情,但我不记得我使用了哪种二值化,无论是 kittler 还是 otsu ..
      • 我不是要你相信我,你自己试试吧。在i.imgur.com/w0CnlC3.png,您将看到由 Otsu 进行二值化后的结果。
      • 但是Kapur的方法效果很好,那时就不需要形态学操作了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-11
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 2011-11-30
      相关资源
      最近更新 更多