低通滤波与高通滤波
- 低通滤波可以去除噪音或平滑图像
- 高通滤波可以帮助查找图像的边缘
图像的卷积
- filter2D(src, ddepth, kernel, anchor, delta, borderType)
- kernel 核
- anchor 锚点
- borderType 边界类型
import cv2 as cv
import numpy as np
img = cv.imread('dog.jpeg')
kernel = np.ones((5,5),np.float32)/25
dst = cv.filter2D(img, -1, kernel)
cv.imshow('dst', dst)
cv.imshow('img',img)
cv.waitKey(0)
方盒滤波与均值滤波
参数a 的作用
- normalize = true, a = 1/W x H
- normalize = FALSE, a = 1
- normalize = true 时,方盒滤波==平均滤波
两个滤波API
boxFilter(src,ddepth,ksize, anchor,normalise, borderType)
blur(src,ksize,anchor,borderType)
import cv2 as cv
import numpy as np
img = cv.imread('dog.jpeg')
# kernel = np.ones((5,5),np.float32)/25
# dst = cv.filter2D(img, -1, kernel)
dst = cv.blur(img, (5, 5))
cv.imshow('dst', dst)
cv.imshow('img', img)
cv.waitKey(0)
高斯滤波
中心位置的比重是最高的。值不一定是最高的
高斯滤波API
- GaussianBlur(img,Kernel,sigmaX,sigmaY,…)
import cv2 as cv
import numpy as np
img = cv.imread('dog.jpeg')
# kernel = np.ones((5,5),np.float32)/25
# dst = cv.filter2D(img, -1, kernel)
# dst = cv.blur(img, (5, 5))
dst = cv.GaussianBlur(img,(5,5),1)
cv.imshow('dst', dst)
cv.imshow('img', img)
cv.waitKey(0)
中值滤波
假设有一个数组[1556789],取其中的中间值作为卷积后的结果值,对胡椒噪音效果明显
- medianBlur(img,ksize)
- ksize 3,5,7…
双边滤波
优点:可以保留边缘,同时可以对边缘内的区域进行平滑处理,常见的用途是比如进行美颜
bilateralFilter(img,d,sigmaColor, sigmaSpace,…)
import cv2 as cv
import numpy as np
img = cv.imread('dog.jpeg')
# kernel = np.ones((5,5),np.float32)/25
# dst = cv.filter2D(img, -1, kernel)
# dst = cv.blur(img, (5, 5))
# dst = cv.GaussianBlur(img,(5,5),1) # 高斯滤波
# dst = cv.medianBlur(img, 3) # 中值滤波
dst = cv.bilateralFilter(img,7,20,50) # 双边滤波
cv.imshow('dst', dst)
cv.imshow('img', img)
cv.waitKey(0)
高通滤波
scharr 算子
- 与sobel类似,只不过使用的kernel值不同
- scharr只能求x或者y方的边缘
- Scharr(src,ddepth,dx,dy,scale=1,delta=0,borderType = BORDER_DEFAULT)
lapulacian算子
Laplacian(img,ddepth,dx,dy,scale=1,ksize=1,borderType = BORDER_DEFAULT)
Canny算子
- 使用5x5高斯滤波消除噪声
- 计算图像梯度的方向(0/45/90/135)
- 取局部极大值
- 阈值计算
阈值计算的方法
Canny API
Canny(img,minVal,maxVal,…)
import cv2 as cv
import numpy as np
img = cv.imread('./dog.jpeg')
dst = cv.Canny(img,100, 200)
cv.imshow('dst',dst)
cv.imshow('img', img)
cv.waitKey(0)