Python调用OpenCV实现图像平滑代码实例


Posted in Python onJune 19, 2020

主要讲解Python调用OpenCV实现图像平滑,包括四个算法:均值滤波、方框滤波、高斯滤波和中值滤波.

给图像增加噪声:

import cv2
import numpy as np

def test10():
  img = cv2.imread("result.jpg", cv2.IMREAD_UNCHANGED)
  rows, cols, chn = img.shape
  # 加噪声
  for i in range(5000):
    x = np.random.randint(0, rows)
    y = np.random.randint(0, cols)
    img[x, y, :] = 255
  cv2.imshow("demo", img)
  if cv2.waitKey(0) == 27:
    cv2.destroyWindow("demo")
test10()

效果如下:

Python调用OpenCV实现图像平滑代码实例

均值滤波: 均值滤波是指任意一点的像素值,都是周围N*M个像素值的均值, result = cv2.blur(图像, 核大小),其中核大小是以(宽度, 高度)表示的元组形式,常见的形式包括: (3, 3)和(5, 5)

代码如下:

import matplotlib.pyplot as plt
import cv2
def test11():
  img = cv2.imread("result.jpg")
  source = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
  # 均值滤波
  result = cv2.blur(source, (5, 5))

  # 显示图像
  title = ["demo1", "demo2"]
  imgs = [source, result]
  for i in range(2):
    plt.subplot(1, 2, i+1)
 plt.imshow(imgs[i], "gray")
    plt.title(title[i])
    plt.xticks([])
    plt.yticks([])
  plt.show()
test11()

效果如下:

Python调用OpenCV实现图像平滑代码实例

将核值调大会让图像变模糊,例如设置为(20, 20),效果如下:如果设置为(1, 1)处理的结果就是原图,核中每个权重值相同,称为均值。

Python调用OpenCV实现图像平滑代码实例

方框滤波

方框滤波和均值滤波核基本一致,区别是需不需要均一化处理。OpenCV调用boxFilter()函数实现方框滤波。函数如下:
result = cv2.boxFilter(原始图像, 目标图像深度, 核大小, normalize属性) 其中,目标图像深度是int类型,通常用“-1”表示与原始图像一致;核大小主要包括(3,3)和(5,5);normalize属性表示是否对目标图像进行归一化处理。当normalize为true时需要执行均值化处理,当normalize为false时,不进行均值化处理,实际上为求周围各像素的和,很容易发生溢出,溢出时均为白色,对应像素值为255。

代码如下:

import cv2
import matplotlib.pyplot as plt
def test12():
  img = cv2.imread("result.jpg")
  source = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
  # 方框滤波
  result = cv2.boxFilter(source, -2, (5, 5), normalize=1)
  # 显示图像
  title = ["demo1", "demo2"]
  imgs = [source, result]
  for i in range(2):
    plt.subplot(1, 2, i+1), plt.imshow(imgs[i], "gray")
    plt.title(title[i])
    plt.xticks([])
    plt.yticks([])
  plt.show()
test12()

效果如下:

Python调用OpenCV实现图像平滑代码实例

如果省略参数normalize,则默认是进行归一化处理。如果normalize=0则不进行归一化处理,像素值为周围像素之和,图像更多为白色。

效果如下:

Python调用OpenCV实现图像平滑代码实例

上图很多像素为白色,因为图像求和结果几乎都是255。如果设置的是2*2矩阵,只取四个像素结果要好些。 result = cv2.boxFilter(source, -1, (2,2), normalize=0)

Python调用OpenCV实现图像平滑代码实例

高斯滤波: 高斯滤波让临近的像素具有更高的重要度,对周围像素计算加权平均值,较近的像素具有较大的权重值。dst = cv2.GaussianBlur(src, ksize, sigmaX) 其中,src表示原始图像,ksize表示核大小,sigmaX表示X方向方差。注意,核大小(N, N)必须是奇数,X方向方差主要控制权重

代码如下:

import cv2
import matplotlib.pyplot as plt
def test12():
  img = cv2.imread("result.jpg")
  source = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
  # 高斯滤波
  result = cv2.GaussianBlur(source, (3, 3), 0)
  # 显示图像
  title = ["demo1", "demo2"]
  imgs = [source, result]
  for i in range(2):
    plt.subplot(1, 2, i+1), plt.imshow(imgs[i], "gray")
    plt.title(title[i])
    plt.xticks([])
    plt.yticks([])
  plt.show()
test12()

效果如下:

Python调用OpenCV实现图像平滑代码实例

核数增加,图像会变模糊,例如设置为(17, 17)

Python调用OpenCV实现图像平滑代码实例

中值滤波: 在使用邻域平均法去噪的同时也使得边界变得模糊。而中值滤波是非线性的图像处理方法,在去噪的同时可以兼顾到边界信息的保留。选一个含有奇数点的窗口W,将这个窗口在图像上扫描,把窗口中所含的像素点按灰度级的升或降序排列,取位于中间的灰度值来代替该点的灰度值.

OpenCV主要调用medianBlur()函数实现中值滤波,图像平滑里中值滤波的效果最好。
dst = cv2.medianBlur(src, ksize)
其中,src表示源文件,ksize表示核大小。核必须是大于1的奇数,如3、5、7等

代码如下:

import cv2
def test13():
  img = cv2.imread("result.jpg")
  # 高斯滤波
  result = cv2.medianBlur(img, 5)
  cv2.imshow("demo1", img)
  cv2.imshow("demo2", result)
  if cv2.waitKey(0) == 27:
    cv2.destroyWindow("demo1")
    cv2.destroyWindow("demo2")
test13()

效果如下:

Python调用OpenCV实现图像平滑代码实例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
实例说明Python中比较运算符的使用
May 13 Python
Python2/3中urllib库的一些常见用法
Dec 19 Python
对Python捕获控制台输出流的方法详解
Jan 07 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
Jul 01 Python
FFrpc python客户端lib使用解析
Aug 24 Python
ansible动态Inventory主机清单配置遇到的坑
Jan 19 Python
Django如何使用jwt获取用户信息
Apr 21 Python
Python3 webservice接口测试代码详解
Jun 23 Python
scrapy中如何设置应用cookies的方法(3种)
Sep 22 Python
解决pycharm 格式报错tabs和space不一致问题
Feb 26 Python
Python爬虫 简单介绍一下Xpath及使用
Apr 26 Python
python基础之//、/与%的区别详解
Jun 10 Python
使用OpenCV对车道进行实时检测的实现示例代码
Jun 19 #Python
为什么python比较流行
Jun 19 #Python
查看keras的默认backend实现方式
Jun 19 #Python
Python图像阈值化处理及算法比对实例解析
Jun 19 #Python
OpenCV 之按位运算举例解析
Jun 19 #Python
Python实现ElGamal加密算法的示例代码
Jun 19 #Python
python 字符串的驻留机制及优缺点
Jun 19 #Python
You might like
提问的智慧(2)
2006/10/09 PHP
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
jquery固定底网站底部菜单效果
2013/08/13 Javascript
jquery操作checked属性以及disabled属性的多种方法
2014/06/20 Javascript
javascript实现带节日和农历的日历特效
2015/02/01 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
jQuery实现弹出窗口弹出div层的实例代码
2017/01/09 Javascript
jquery之基本选择器practice(实例讲解)
2017/09/30 jQuery
javascript原生封装一个淡入淡出效果的函数测试实例代码
2018/03/19 Javascript
微信小程序websocket实现聊天功能
2020/03/30 Javascript
vue回到顶部监听滚动事件详解
2019/08/02 Javascript
vue-cli4.x创建企业级项目的方法步骤
2020/06/18 Javascript
python3使用SMTP发送HTML格式邮件
2018/06/19 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
基于pandas向csv添加新的行和列
2020/05/25 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
2020/06/22 Python
英国第一家领先的在线处方眼镜零售商:Glasses Direct
2018/02/23 全球购物
娇韵诗香港官网:Clarins香港
2020/08/13 全球购物
店长岗位的工作内容
2013/11/12 职场文书
运动会广播稿200字
2014/01/15 职场文书
销售人员职业生涯规划范文
2014/03/01 职场文书
《春笋》教学反思
2014/04/15 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
监守自盗观后感
2015/06/10 职场文书
《秋天的雨》教学反思
2016/02/19 职场文书
导游词之河北滦平金山岭长城
2019/10/16 职场文书
导游词之包公祠
2019/11/25 职场文书
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js
MySQL Server 层四个日志
2022/03/31 MySQL
MySQL 原理与优化之原数据锁的应用
2022/08/14 MySQL