“毛星云OpenCV3编程入门之python实现”第十一篇滤波

6.2.5五种滤波综合示例

# -*- coding: utf-8 -*-

import cv2
import random


# 图像椒盐化处理
# 产生随机num个点,将这些点的灰度值设置为255,即白点
def saltimage(srcImage, num):
	for x in range(num):
		i = random.randint(0, srcImage.shape[0]-1)
		j = random.randint(0, srcImage.shape[1]-1)
		srcImage[i][j][0] = 255
		srcImage[i][j][1] = 255
		srcImage[i][j][2] = 255
	return srcImage


# 方框滤波
def showboxFilterImage(n):
	boxFilterImage = cv2.boxFilter(srcImage, -1, (n + 1, n + 1))  # 加1是为了保证ksize不为(0,0),不然会报错,因为Trackbar的取值范围是>=0
	cv2.imshow("boxFilterImage", boxFilterImage)


# 均值滤波
def showblurImage(n):
	blurImage = cv2.blur(srcImage, (n + 1, n + 1))  # 加1是为了保证ksize不为(0,0),不然会报错,因为Trackbar的取值范围是>=0
	cv2.imshow("blurImage", blurImage)


# 高斯滤波
def showGaussianBlurImage(n):
	GaussianBlurImage = cv2.GaussianBlur(srcImage, (n * 2 + 1, n * 2 + 1), 0)  # 保证高斯滤波内核大小必须为正数或者奇数,不然会报错
	cv2.imshow("GaussianBlurImage", GaussianBlurImage)


# 中值滤波
def medianBlurImage(n):
	# 中值滤波能很好的处理掉椒盐点
	mediaImage = cv2.medianBlur(saltImage, n*2 + 1) # 保证中值滤波内核大小必须为>=1的奇数,不然会报错。
	cv2.imshow("medianBlurImage", mediaImage)


# 双边滤波
def bilateralFilterImage(n):
	bilateralImage = cv2.bilateralFilter(srcImage, n, n * 2, n / 2)
	cv2.imshow("bilateralFilterImage", bilateralImage)


srcImage = cv2.imread("E:/Study/python/OpenCV_study/img/10.jpg")
cv2.imshow("srcImage", srcImage)
value = 3                               # 初始化bar的位置
saltImage = srcImage.copy()             # 复制一份图像,为了椒盐不影响原图
saltImage = saltimage(saltImage, 3000)  # 生成3000个点,做椒盐效果
cv2.imshow("saltImage", saltImage)

cv2.namedWindow("boxFilterImage")
cv2.createTrackbar("ksize", "boxFilterImage", value, 40, showboxFilterImage)
boxFilterImage = cv2.boxFilter(srcImage, -1, (value + 1, value + 1))
cv2.imshow("boxFilterImage", boxFilterImage)

cv2.namedWindow("blurImage")
cv2.createTrackbar("ksize", "blurImage", value, 40, showblurImage)
blurImage = cv2.blur(srcImage, (value + 1, value + 1))
cv2.imshow("blurImage", blurImage)

cv2.namedWindow("GaussianBlurImage")
cv2.createTrackbar("ksize", "GaussianBlurImage", value, 40, showGaussianBlurImage)
GaussianBlurImage = cv2.GaussianBlur(srcImage, (value * 2 + 1, value * 2 + 1), 0)  # 保证高斯滤波内核大小必须为正数或者奇数,不然会报错
cv2.imshow("GaussianBlurImage", GaussianBlurImage)

cv2.namedWindow("medianBlurImage")
cv2.createTrackbar("ksize", "medianBlurImage", value, 40, medianBlurImage)
mediaImage = cv2.medianBlur(saltImage, value)
cv2.imshow("medianBlurImage", mediaImage)

cv2.namedWindow("bilateralFilterImage")
cv2.createTrackbar("ksize", "bilateralFilterImage", value, 40, bilateralFilterImage)
bilateralImage = cv2.bilateralFilter(srcImage, value, value * 2, value / 2)
cv2.imshow("bilateralFilterImage", bilateralImage)

cv2.waitKey(0)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值