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 相关文章推荐
Python2.x中str与unicode相关问题的解决方法
Mar 30 Python
举例讲解Python中的迭代器、生成器与列表解析用法
Mar 20 Python
Python微信公众号开发平台
Jan 25 Python
Python3.6实现连接mysql或mariadb的方法分析
May 18 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
Jun 11 Python
python判断一个数是否能被另一个整数整除的实例
Dec 12 Python
Pytorch加载部分预训练模型的参数实例
Aug 18 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
python接口调用已训练好的caffe模型测试分类方法
Aug 26 Python
pycharm激活码有效到2020年11月底
Sep 18 Python
windows下python安装pip方法详解
Feb 10 Python
Django drf请求模块源码解析
Jun 08 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
PHP在线书签系统分享
2016/01/04 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
JS写的数字拼图小游戏代码[学习参考]
2008/10/29 Javascript
如何正确使用javascript 来进行我们的程序开发
2014/06/23 Javascript
JavaScript代码实现左右上下自动晃动自动移动
2016/04/08 Javascript
js手机号批量滚动抽奖实现代码
2020/04/17 Javascript
JavaScript实现无穷滚动加载数据
2017/05/06 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
vue-devtools的安装步骤
2018/04/23 Javascript
Vue在页面数据渲染完成之后的调用方法
2018/09/11 Javascript
angularJs复选框checkbox选中进行ng-show显示隐藏的方法
2018/10/08 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
微信小程序实现动态获取元素宽高的方法分析
2018/12/10 Javascript
js数组的基本使用总结
2021/01/18 Javascript
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
python调用新浪微博API项目实践
2014/07/28 Python
Python中的defaultdict模块和namedtuple模块的简单入门指南
2015/04/01 Python
wxPython的安装图文教程(Windows)
2017/12/28 Python
python数据结构学习之实现线性表的顺序
2018/09/28 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
2018/10/14 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
用python介绍4种常用的单链表翻转的方法小结
2020/02/24 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
Hotels.com日本:国外和海外住宿,酒店预订
2019/12/13 全球购物
学校经典推荐信
2013/10/30 职场文书
博士研究生自我鉴定范文
2013/12/04 职场文书
广告学专业求职信
2014/06/19 职场文书
商场父亲节活动方案
2014/08/27 职场文书
个人工作总结怎么写?
2019/04/09 职场文书
创业计划书之o2o水果店
2019/08/30 职场文书
Python中相见恨晚的技巧
2021/04/13 Python
oracle通过存储过程上传list保存功能
2021/05/12 Oracle