问题描述
我正在尝试使用OpenCV和Python检测下图中的白点。
I'm trying to detect the white dots in the following image using OpenCV and Python.
我尝试使用函数cv2.HoughCircles但没有任何成功。
I tried using the function cv2.HoughCircles but without any success.
我是否需要使用其他方法?
Do I need to use a different method?
这是我的代码:
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()
推荐答案
如果您可以在OpenCV中重现形态重建,您可以轻松构建h-dome变换,从而显着简化任务。否则,高斯滤波的简单阈值也可能就足够了。
If you can reproduce a morphological reconstruction in OpenCV, you can easily build a h-dome transform which simplifies the task significantly. Otherwise, a simple threshold on a gaussian filtering might be enough too.
二值化[FillingTransform [GaussianFilter [f,2],0.4,Padding - > 1]]
高斯滤波在上面的代码中完成,有效地抑制了输入边界周围的噪声,否则就是h-dome变换。
The gaussian filtering was done in the code above to effectively suppress the noise around the border of the input, which would remain after the h-dome transform otherwise.
接下来是高斯滤波后的简单阈值结果( Binarize [GaussianFilter [f,2] ,0.5]
)以及使用Kapur阈值方法直接二值化给出的另一个结果(参见文章使用直方图的熵进行灰度图像阈值处理的新方法(这是不再是一种新方法,它来自1985)):
Next there is the result of a simple threshold after a gaussian filtering (Binarize[GaussianFilter[f, 2], 0.5]
) as well another result that is given by a direct binarization using Kapur's thresholding method (see the paper "A new method for gray-level picture thresholding using the entropy of the histogram" (which is no longer a new method, it is from 1985)):
上面的右图有很多小点(在此图像分辨率下无法看到),但是全自动。从这3个选项中,OpenCV中只存在第二个选项。
The right image above has a lot of small points all over the border (which cannot be seen at this image resolution), but is fully automatic. From these 3 options, only the second one is already present in OpenCV.
这篇关于使用openCV和python检测对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!