中值滤波函数 medianBlur

在OpenCV中,中值滤波函数的基本格式是cv2.medianBlur(img, rho)。函数的第一个参数img待处理图像;第二个参数rho孔径的尺寸,一个大于1的奇数。假如取$rho=5$,中值滤波器就会使用$5×5$的范围来计算。即对像素的中心值及其$5×5$邻域组成了一个数值集,对其进行处理计算,当前像素被其中值替换掉。函数的返回值为处理结果

中值滤波的作用

如果在某个像素周围有白色或黑色的像素,这些白色或黑色的像素不会选择作为中值(最大或最小值不用),而是被替换为邻域值。 由于中值滤波不会处理最大和最小值,所以就不会受到噪声的影响。相反,如果直接采用blur进行均值滤波,则不会区分这些噪声点,滤波后的图像会受到噪声的影响。 中值滤波器在边缘处理方面也有优势。但中值滤波器会清除掉某些区域的纹理,细节会造成不同程度的丢失。

圆形检测函数 HoughCircles

类似直线检测函数,圆形检测函数 HoughCircles的基本格式为

cv2.HoughCircles(img, method, dp, minDist, circles, param1, param2, minRadius, maxRadius) 

编程实例

Python 实现代码

import cv2 import numpy as np # circles.jpg 是被检测图像
myCircle = cv2.imread('circles.jpg')
gray_img = cv2.cvtColor(myCircle, cv2.COLOR_BGR2GRAY)
img = cv2.medianBlur(gray_img, 5) # 孔径为5的中值滤波
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,120, param1=100,param2=30,minRadius=0,maxRadius=0)
circles = np.uint16(np.around(circles)) for i in circles[0,:]: # 标记圆形的圆周
cv2.circle(myCircle,(i[0],i[1]),i[2],(0,255,0),2) # 标记圆形的圆心
cv2.circle(myCircle,(i[0],i[1]),2,(0,0,255),3)
cv2.imwrite("circles.jpg", myCircle) cv2.imshow("HoughCirlces", myCircle) cv2.waitKey()
cv2.destroyAllWindows() 

检测结果

circles.jpg
上图为被检测对象

circles-1.jpg
上图为检测结果

Last modification:September 18th, 2019 at 03:27 pm