图像模糊
cv.filter2D
cv.filter2D可以将内核与图像进行卷积,进而产生不同效果的图像。
dst=cv.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])
src 原图像
dst 目标图像,与原图像尺寸和通过数相同
ddepth 目标图像的所需深度
kernel 卷积核(或相当于相关核),单通道浮点矩阵(也是该函数的关键)
anchor 内核的锚点,指示内核中过滤点的相对位置;锚应位于内核中;默认值(-1,-1)表示锚位于内核中心。
detal 在将它们存储在dst中之前,将可选值添加到已过滤的像素中。类似于偏置。
borderType 像素外推法
不同的卷积核对于图像处理的效果不同
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('C:\\Users\\Administrator\\Desktop\\pic\\opencv.png')
kernel = np.array((
[0, 1, 0],
[1, -3, 1],
[0, 1, 0]), dtype="float32")
dst = cv.filter2D(img,-1,kernel)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Averaging')
plt.xticks([]), plt.yticks([])
plt.show()
print(kernel)
blur()函数
blur()函数,平均模糊可以用标准化的盒式过滤器来平滑图像。(模糊图像)
cv2.blur(src, ksize[, dst[, anchor[, borderType]]])
src: 输入的图像
ksize: 表示模糊核大小的元组。
dst: 输出图像
anchor: 内核的锚点,指示内核中过滤点的相对位置;锚应位于内核中;默认值(-1,-1)表示锚位于内核中心。
borderType: 像素外推法
返回值是处理过的图片
import cv2 as cv
img = cv.imread('C:\\Users\\Administrator\\Desktop\\pic\\opencv.png')
blur = cv.blur(img,(5,5))
cv.imshow('asda',blur)
cv.waitKey(100000)
cv.destroyAllWindows()
boxFilter()
可以使用非标准化的框式过滤器,来进行过滤和噪音的去除
cv.boxFilter( InputArray src, OutputArray dst, int ddepth,Size ksize, Point anchor
src:输入图像
dst:输出图像
ddepth:输出图像深度(-1使用src.depth())。
ksize:模糊核的大小。
anchor :锚点;默认值点(-1,-1)表示锚点在内核中心。
normalize :指定内核是否按其区域标准化。如果输入True等价于 均值滤波cv2.blur,输入=False 时 卷积结果>255时,置为255
borderType :边界模式
返回值是输出图片
import cv2 as cv
img = cv.imread('C:\\Users\\Administrator\\Desktop\\pic\\opencv.png')
blur=cv.boxFilter(img,-1, (3, 3), normalize=False)
cv.imshow('asda',blur)
cv.waitKey(100000)
cv.destroyAllWindows()
cv.GaussianBlur()
高斯模糊,可以模糊图像,去除高斯噪声
cv.GaussianBlur(src,ksize,sigmaX [,dst [,sigmaY [,borderType]]])-> dst
src输入图像,图像可以具有任意数量的通道,这些通道可以独立处理,但深度应为CV_8U,CV_16U,CV_16S,CV_32F或CV_64F。
dst输出图像
ksize高斯内核大小。 ksize.width和ksize.height可以不同,但它们都必须为正数和奇数,也可以为零,然后根据sigma计算得出。
sigmaX X方向上的高斯核标准偏差。
sigmaY Y方向上的高斯核标准差;如果sigmaY为零,则将其设置为等于sigmaX;如果两个sigmas为零,则分别从ksize.width和ksize.height计算得出;为了完全控制结果,而不管将来可能对所有这些语义进行的修改,建议指定所有ksize,sigmaX和sigmaY。
import cv2 as cv
img = cv.imread('C:\\Users\\Administrator\\Desktop\\pic\\opencv.png')
blur = cv.GaussianBlur(img,(5,5),0)
cv.imshow('asda',blur)
cv.waitKey(100000)
cv.destroyAllWindows()
cv.medianBlur()
中位模糊,这对于消除图像中的椒盐噪声非常有效
cv2.medianBlur(src, ksize[, dst]) -> dst
src:待处理的输入图像;
ksize:参数表示滤波窗口尺寸,必须是奇数并且大于 1。比如这里是 5,中值滤波器就会使用 5×5 的范围来计算,即对像素的中心值及其 5×5 邻域组成了一个数值集,对其进行处理计算,当前像素被其中值替换掉。
dst:参数表示输出与 src 相同大小和类型的图像。
import cv2 as cv
img = cv.imread('C:\\Users\\Administrator\\Desktop\\pic\\opencv.png')
median = cv.medianBlur(img,5)
cv.imshow('asda',median)
cv.waitKey(100000)
cv.destroyAllWindows()
cv.bilateralFilter()
双边滤波,在去除噪声的同时保持边缘清晰锐利非常有效。但是,与其他过滤器相比,该
操作速度较慢。
cv2.bilateralFilter(src, d,sigmaColor,sigmaSpace) -> dst
src:输入图像
d:过滤时周围每个像素领域的直径
sigmaColor:在color space中过滤sigma。参数越大,临近像素将会在越远的地方mix。
sigmaSpace:在coordinate space中过滤sigma。参数越大,那些颜色足够相近的的颜色的影响越大。
import cv2 as cv
img = cv.imread('C:\\Users\\Administrator\\Desktop\\pic\\opencv.png')
blur = cv.bilateralFilter(img,9,75,75)
cv.imshow('asda',blur)
cv.waitKey(100000)
cv.destroyAllWindows()