OpenCV基础_二
阈值和平滑处理
cv2.threshold()二值化函数
ret,thresh = cv2.threshold(src, thresh, maxval, type[, dst])
- 参数
src:所要进行二值化处理的灰度图
thresh:阈值
maxval:最大值
type:有八种常见类型
- 返回值
ret:参数中指定的阈值thresh
thresh:二值化后的灰度图
平滑处理
原图:
def cv_show(name,img): cv2.imshow(name,img) cv2.waitKey(0) cv2.destroyAllWindows()
- 均值滤波 简单的平均卷积操作
img = cv2.imread('ZS.png') blur = cv2.blur(img,(3,3)) cv_show('img',blur)
- 方框滤波 基本和均值滤波一样 (可以选择归一化,若不归一化容易越界,越界取255)
img = cv2.imread("ZS.png") box = cv2.boxFilter(img,-1,(3,3),normalize=True) cv_show('img',box)
- 高斯滤波
img = cv2.imread("ZS.png") aussian = cv2.GaussianBlur(img,(3,3),1) cv_show('img',aussian)
- 中值滤波 用中值代替
img = cv2.imread("ZS.png") median = cv2.medianBlur(img,5) cv_show('img',median)
- 均值滤波 高斯滤波 中值滤波 比较
res = np.hstack((blur,aussian,median)) cv_show('res',res)
Canny边缘检测
利用高斯滤波对图像平滑处理
Canny(img,minval,maxval)利用高阈值进行非最大值抑制
高于高阈值 保留
低于低阈值 舍弃
处于高阈值和低阈值之间若和保留点项链则保留,否则舍弃
阈值越高,条件越苛刻,符合的边缘越少
img = cv2.imread('1.jpg') v1 = Canny(img,100,200) v2 = Canny(img,50,100) res = np.hstack((v1,v2)) cv_show('res',res)原图:
边缘检测图: