1. 常用滤波/模糊操作
import cv2
import numpy as np
import matplotlib.pyplot as plot
img = cv2.imread("tmp.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img_g = cv2.GaussianBlur(img, (7,7), 0)
img_mb = cv2.medianBlur(img, ksize=7) #中指滤波
img_bm = cv2.blur(img, ksize=(7,7)) #均值滤波
img_bf = cv2.boxFilter(img, ddepth=-1, ksize=(7,7)) #方框滤波
img_bfr = cv2.bilateralFilter(img, 7, 100, 100) #双边滤波
self_kernel = np.array([[0,-1,0],[-1,7,-1],[0,-1,0]]) #自定义锐化核
img_f = cv2.filter2D(img, ddepth=-1, kernel=self_kernel)
img_eh = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
img_eh = cv2.equalizeHist(img_eh)
plot.figure(figsize=(12,8));
plot.subplot(2,4,1)
plot.title('source image')
plot.imshow(img)
plot.subplot(2,4,2)
plot.title('Gaussian Blur')
plot.imshow(img_g)
plot.subplot(2,4,3)
plot.title('Mean blur')
plot.imshow(img_bm)
plot.subplot(2,4,4)
plot.title('Median Blur')
plot.imshow(img_mb)
plot.subplot(2,4,5)
plot.title('box filter')
plot.imshow(img_bf)
plot.subplot(2,4,6)
plot.title('bilateral Filter')
plot.imshow(img_bfr)
plot.subplot(2,4,7)
plot.title('self filter')
plot.imshow(img_f)
plot.subplot(2,4,8)
plot.title('equalize Hist')
plot.imshow(img_eh)
plot.show()
2. 常用色彩调节操作
import cv2
import numpy as np
import matplotlib.pyplot as plot
img = cv2.imread("tmp.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
noise = np.random.randint(0, 50, img.shape[:3], dtype=np.uint8) #增加随机噪声
img_ni = cv2.add(img, noise)
img_bi = cv2.add(img, np.array([50])) #增加亮度
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
(h,s,v) = cv2.split(img_hsv)
s1 = np.clip(s+50, 0, 255) #增加饱和度
img_si = cv2.merge([h,s1,v])
img_si = cv2.cvtColor(img_si, cv2.COLOR_HSV2RGB)
v1 = np.clip(v+50, 0, 255) #增加亮度
img_sb = cv2.merge([h,s,v1])
img_sb = cv2.cvtColor(img_sb, cv2.COLOR_HSV2RGB)
plot.figure(figsize=(15,3));
plot.subplot(1,5,1)
plot.title('source image')
plot.imshow(img)
plot.subplot(1,5,2)
plot.title('add noise')
plot.imshow(img_ni)
plot.subplot(1,5,3)
plot.title('RGB add bright')
plot.imshow(img_bi)
plot.subplot(1,5,4)
plot.title('add saturation')
plot.imshow(img_si)
plot.subplot(1,5,5)
plot.title('HSV add bright')
plot.imshow(img_sb)
plot.show()
3. 滤波函数说明
函数名 | 作用描述 | 典型应用场景 | 核心特点 |
---|---|---|---|
cv2.blur() | 均值滤波(归一化方框滤波) | 快速简单去噪、均匀模糊 | ✅ 计算快 ❌ 边缘模糊明显 |
cv2.boxFilter() | 方框滤波(可非归一化) | 自定义权重模糊、非归一化计算 | ✅ 支持非归一化(可能溢出) ❌ 需手动控制 |
cv2.GaussianBlur() | 高斯滤波(正态分布权重) | 消除高斯噪声、自然平滑 | ✅ 保留边缘较好 ❌ 计算量较大 |
cv2.medianBlur() | 中值滤波(取像素中位数) | 去除椒盐噪声、脉冲噪声 | ✅ 保护边缘 ❌ 仅支持奇数核大小 |
cv2.bilateralFilter() | 双边滤波(空间+颜色权重) | 保边去噪、美颜处理 | ✅ 保留细节 ❌ 计算复杂度极高 |
cv2.filter2D() | 自定义卷积核滤波 | 特殊滤波效果(锐化、边缘检测等) | ✅ 高度灵活 ❌ 需手动设计卷积核 |
系列文章: