OpenCV python学习笔记2 之滤波器

        卷积核一般为基数,例如3x3,5x5。一方面是由于padding,另一方面是保证锚点在中间,防止图片位置发生偏移。

        边界扩充。原图为分辨率5x5,卷积核大小为3x3,原图通过边界扩充后大小变为7x7,再和3x3的卷积核进行卷积后,输出图像的大小依然是5x5 

OpenCV python学习笔记2 之滤波器_第1张图片 N = ( W - F + 2 P ) / S + 1。N 输出图像大小,W 原图大小,F卷积核,P扩充尺寸,S步长

低通滤波可以去除噪音或平滑图像  

高通滤波可以帮助查找图像的边缘

高斯滤波GaussianBlur(img,kernel,sigmaX,sigmaY)

均值滤波,过滤胡椒噪音 medianBlur(img,ksize)

import cv2
import numpy as np
img = cv2.imread('dog.jpg')

#高斯滤波
new1 = cv2.GaussianBlur(img,(27,27),sigmaX=1)

#均值滤波
new2 = cv2.blur(img,(5,5))

#中值滤波
cv2.medianBlur(img,(5,5))

cv2.imshow('img',img)
cv2.imshow('new',new)
cv2.waitKey(0)

双边滤波:

可以保留边缘,同时可以对边缘内的区域进行平滑处理。美颜功能 好,不适合胡椒噪音

OpenCV python学习笔记2 之滤波器_第2张图片

#双边滤波(img,d,sigmaColor,sigmaSpace))
new3 = cv2.bilateralFilter(img,5,20,50)

高通滤波(索贝尔,沙尔)

Sobel(提取不同方向上的边缘)

import cv2

img = cv2.imread('number.jpg')

#计算x方向上的边缘,默认ksize=3,如何ksize=-1,转化为沙尔算子,检测更加细的边缘
dst1 = cv2.Sobel(img,cv2.CV_64F,1,ksize=3)

#计算y方向上的边缘
dst2 = cv2.Sobel(img,cv2.CV_64F,0,1)

new = cv2.add(dst1,dst2)

cv2.imshow('dst1',dst1)
cv2.imshow('new',new)
cv2.waitKey(0)

拉普拉斯算子 可以同时求两个方向上的边缘,但是使用前应先去噪

ldst = cv2.Laplacian(img,cv2.CV_64F,ksize=5) #默认ksize = 1

Canny边缘检测

1.使用5x5高斯滤波消除噪声

2.计算图像的梯度方向(0,45,90,135)

3.去局部最大值

4.阀值计算

Canny(img, minVal,maxVal)

你可能感兴趣的:(学习)