这里写自定义目录标题
选取一张图片,通过滑动条控制参数,对图片进行均值滤波,高斯滤波,中值滤波,双波滤波的处理
最近在学习人机交互,本文章是对python调用opencv实现图像平滑的一些总结。包括四个算法:均值滤波,中值滤波,高斯滤波,双边滤波。
均值滤波 cv2.blur(img, (ksize,ksize))
第一个参数是处理的图像
第二个参数是核的大小,核的大小只能是大于1的奇数,如3,5,7等。
中值滤波 cv2.medianBlur(img, kisze)
第一个参数是操作的图像
第二个参数是核的尺寸
高斯滤波 cv2.gaussianBlur(img, (ksize, ksize), sigmaX)
第二个参数是核的大小
第三个参数sigmaX影响模糊效果:
sigmaX小,表现在高斯曲线上就是曲线越高越尖,表现在滤波效果上就是模糊程度小;
sigmaX大,表现在高斯曲线上就是曲线越矮越平缓,表现在滤波效果上就是模糊程度大
双边滤波 cv2.bilateralFilter(img, d, sigmaColor, sigmaSpace)
第二个参数是领域的直径
第三个参数sigmaColor是灰度值相似性高斯函数标准差和空间高斯函数标准差。
第四个参数sigmaSpace是空间高斯函数标准差
代码如下:
# -*- coding: utf-8 -*-
import cv2
WINDOWNAME = "lvbo"
MeanBlurValue = 1
GaussianBlurValue = 1
MedianBlurValue = 1
BilateralFilterValue = 1
KSIZE = 1
MaxVal = 20
#均值滤波回调函数
def on_MeanBlur(MeanBlurValue):
KSIZE = MeanBlurValue * 2 + 1
img1 = cv2.blur(img, (KSIZE, KSIZE))
cv2. imshow(WINDOWNAME, img1)
#中值滤波回调函数
def on_MedianBlur(MedianBlurValue):
KSIZE = MedianBlurValue * 2 + 1
img3 = cv2.medianBlur(img, KSIZE)
cv2.imshow(WINDOWNAME, img3)
#高斯滤波回调函数
def on_GaussianBlur(GaussianBlurValue):
global KSIZE
KSIZE = GaussianBlurValue * 2 + 3
#后两个参数:核的大小和方差
img2 = cv2.GaussianBlur(img, (KSIZE, KSIZE), 0)
cv2.imshow(WINDOWNAME, img2)
#双边滤波回调函数
def on_BilarteralFilter(BilateralFilterValue):
KSIZE = BilateralFilterValue * 20 + 5
#后两个参数:空间高斯函数标准差和灰度值相似性高斯函数标准差
img4 = cv2.bilateralFilter(img, 5, KSIZE, KSIZE)
cv2.imshow(WINDOWNAME, img4)
img = cv2.imread('img.jpg')
cv2.namedWindow(WINDOWNAME)
cv2.createTrackbar("Blur", WINDOWNAME, MeanBlurValue, MaxVal, on_MeanBlur)
on_MeanBlur(1)
cv2.createTrackbar("Gauss", WINDOWNAME, GaussianBlurValue, MaxVal, on_GaussianBlur)
on_GaussianBlur(1)
cv2.createTrackbar("Median", WINDOWNAME, MedianBlurValue, MaxVal, on_MedianBlur)
on_MedianBlur(1)
cv2.createTrackbar("Bilateral", WINDOWNAME, BilateralFilterValue, 20, on_BilarteralFilter)
on_BilarteralFilter(1)
if cv2.waitKey(0) == 27:
cv2.destroyAllWindows()
运行结果:
[1]: 《Python and OpenCV for starter》
[2]: 《Opencv官方教程中文版(For Python)》