0
点赞
收藏
分享

微信扫一扫

一篇文章秒懂opencv的全部图像平滑处理操作Python实现


图像平滑处理的基本原理是,将噪声所在像素点的像素值处理为其周围临近像素点的值得近似值。取近似值得方式很多,本章主要介绍:

  • 均值滤波
  • 方框滤波
  • 高斯滤波
  • 中值滤波
  • 双边滤波
  • 2D卷积也成自定义卷积

第一,均值滤波

import cv2

img = cv2.imread('../data/1.jpg', 1)

f = cv2.blur(img, (3, 3))

cv2.imshow('img', img)
cv2.imshow('f', f)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.imwrite('../data/blur.jpg', f)

第二,方框滤波,实现归一化的方框滤波相当于均值滤波

import cv2

img = cv2.imread('../data/1.jpg', 1)

f = cv2.boxFilter(img, -1, (3, 3), normalize=0) # -1表示处理之后的图片深度跟原图片相同

cv2.imshow('img', img)
cv2.imshow('f', f)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.imwrite('../data/blur.jpg', f)

第三,高斯滤波可以模糊图片边缘信息

import cv2

img = cv2.imread('../data/1.jpg', 1)

f = cv2.GaussianBlur(img, (3, 3), 0, 0)
# 后面两个0表示高斯滤波的权重的标准差根据卷积核的大小来决定(默认卷积核为5计算出来的标准差为1.1)
# 卷积核越大,噪音去除效果会越好,照片会越模糊
cv2.imshow('img', img)
cv2.imshow('f', f)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.imwrite('../data/blur.jpg', f)

第四,中值滤波

import cv2

img = cv2.imread('../data/1.jpg', 1)

f = cv2.medianBlur(img, 3)

cv2.imshow('img', img)
cv2.imshow('f', f)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.imwrite('../data/blur.jpg', f)

第五,双边滤波有助于保留图像边界信息,但是去除噪声的效果并不好

import cv2

img = cv2.imread('../data/1.jpg', 1)

f = cv2.bilateralFilter(img, 5, 50, 100)
# 第二个参数表示以当前像素点为中心点的直径
# 第三个参数表示滤波处理时选取的颜色差值范围,该值决定了周围那些像素点能够参与到滤波中来
# 第四个参数它的值越大,说明有越多的点能够参与到该滤波计算中来
cv2.imshow('img', img)
cv2.imshow('f', f)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.imwrite('../data/blur.jpg', f)

双边滤波处理前

一篇文章秒懂opencv的全部图像平滑处理操作Python实现_cv


处理之后

一篇文章秒懂opencv的全部图像平滑处理操作Python实现_opencv_02


第六,2D卷积也称自定义卷积

对于图像处理的大神来说,也不是很好搞清楚卷积的真正内含,从某种程度而言,卷积操作是个黑盒子

而不同的卷积核只是它的参数而已,出来的效果谁都无法用理论证明,只要多试几次,然后总结出

相对于好的效果进行实际效果的应用

import cv2
import numpy as np


kernel = np.ones((5, 5), np.float32) / 81 # 在这里自定义卷积核

img = cv2.imread('../data/1.jpg', 1)

f = cv2.filter2D(img, -1, kernel)

cv2.imshow('img', img)
cv2.imshow('f', f)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.imwrite('../data/blur.jpg', f)


举报

相关推荐

0 条评论