霍夫变换为什么老提取出不存在的圆呀,我已经中值滤波了
opencv吧
全部回复
仅看楼主
level 1
zs920918 楼主
调完代码后能准确识别第一张图中的圆
代码不动,将输入的图片改成第二张的图,就识别出了一个特别离谱的圆,最规矩的圆反到没识别出来
把第二张的图片resize了一下,从1920*1080改成1600*900,又可以准确识别出了,不明白问题出现在哪
2020年02月08日 06点02分 1
level 1
zs920918 楼主
附上代码
img = cv2.imread('scene_4.jpg')
img_b = img.copy()
#背景图像预处理
img_b[:,:,2] = 0
ret,img_bt = cv2.threshold(img_b, 10, 255, cv2.THRESH_BINARY)
img_bt[:,:,1] = 0
kernel = np.ones((3,3), np.uint8)
img_c = ~img_bt
gray = cv2.cvtColor(img_c, cv2.COLOR_BGR2GRAY)
img_cd = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, kernel)
scene_e = cv2.erode(img_cd, kernel, iterations = 3)
scene_d = cv2.dilate(scene_e, kernel, iterations = 3)
bet,img_a = cv2.threshold(scene_d, 230, 255, cv2.THRESH_BINARY)
cnts,hierarchy = cv2.findContours(img_a, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
img_contours = img.copy()
res_blood = cv2.drawContours(img_contours, cnts, -1, (0, 255, 255), 3)
#用霍夫变换提取出圆
#img_a = cv2.resize(img_a,(1600,900))
img_a = cv2.medianBlur(img_a,5)
cimg = cv2.cvtColor(img_a,cv2.COLOR_GRAY2BGR)
circles = cv2.HoughCircles(img_a,cv2.HOUGH_GRADIENT,1,2000,param1=50,param2=30,minRadius=0,maxRadius=0)
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
# draw the outer circle
cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
cv_show(cimg, 'ddd')
2020年02月08日 06点02分 2
level 2
很简单,滤波之前对园做傅立叶变换即可
2020年02月11日 10点02分 3
1