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常用内置函数总结
Feb 08 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
Mar 31 Python
详解Python中的装饰器、闭包和functools的教程
Apr 02 Python
python实现字符串和日期相互转换的方法
May 13 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
Nov 19 Python
python3 判断列表是一个空列表的方法
May 04 Python
Python高斯消除矩阵
Jan 02 Python
详解Python的三种可变参数
May 08 Python
用Anaconda安装本地python包的方法及路径问题(图文)
Jul 16 Python
Django实现跨域的2种方法
Jul 31 Python
python 画3维轨迹图并进行比较的实例
Dec 06 Python
tensorflow查看ckpt各节点名称实例
Jan 21 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
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
window+nginx+php环境配置 附配置搭配说明
2010/12/29 PHP
PHP浮点数的一个常见问题
2016/03/10 PHP
LBS blog sql注射漏洞[All version]-官方已有补丁
2007/08/26 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
2012/08/14 Javascript
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
2015/05/04 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
分享一个原生的JavaScript拖动方法
2016/09/25 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
jQuery实现下拉菜单的实例代码
2017/06/19 jQuery
jQuery Autocomplete简介_动力节点Java学院整理
2017/07/17 jQuery
echarts实现词云自定义形状的示例代码
2019/02/20 Javascript
详解使用Nuxt.js快速搭建服务端渲染(SSR)应用
2019/03/13 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
[01:04]不如跳舞!DOTA2新英雄玛尔斯的欢乐日常
2019/03/11 DOTA
python中defaultdict的用法详解
2017/06/07 Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
2018/10/30 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
python关于倒排列的知识点总结
2020/10/13 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
Windows和Linux动态库应用异同
2016/04/17 面试题
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
2013/07/06 面试题
慰问敬老院活动总结
2014/04/26 职场文书
给校长的一封检讨书
2014/09/20 职场文书
教师四风问题整改措施
2014/09/25 职场文书
党的群众路线教育实践活动整改方案
2014/10/28 职场文书
2014年人力资源工作总结
2014/11/19 职场文书
承诺函格式模板
2015/01/21 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis
Java对文件的读写操作方法
2022/04/29 Java/Android
MySQL解决Navicat设置默认字符串时的报错问题
2022/06/16 MySQL