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中encode()方法的使用简介
May 18 Python
python 安装virtualenv和virtualenvwrapper的方法
Jan 13 Python
利用python打印出菱形、三角形以及矩形的方法实例
Aug 08 Python
python中Switch/Case实现的示例代码
Nov 09 Python
python使用邻接矩阵构造图代码示例
Nov 10 Python
用Python分析3天破10亿的《我不是药神》到底神在哪?
Jul 12 Python
Python爬虫运用正则表达式的方法和优缺点
Aug 25 Python
TensorFlow实现从txt文件读取数据
Feb 05 Python
python实现遍历文件夹图片并重命名
Mar 23 Python
解决python使用list()时总是报错的问题
May 05 Python
Keras 加载已经训练好的模型进行预测操作
Jun 17 Python
Python中zipfile压缩包模块的使用
May 14 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实现小型站点广告管理(修正版)
2006/10/09 PHP
PHP curl 获取响应的状态码的方法
2014/01/13 PHP
PHP使用PDO访问oracle数据库的步骤详解
2017/09/29 PHP
从URL中提取参数与将对象转换为URL查询参数的实现代码
2012/01/12 Javascript
jQuery下的动画处理总结
2013/10/10 Javascript
js实现收缩菜单效果实例代码
2013/10/30 Javascript
使用node.js 制作网站前台后台
2014/11/13 Javascript
JQuery.get提交页面不跳转的解决方法
2015/01/13 Javascript
JavaScript类型系统之布尔Boolean类型详解
2016/06/26 Javascript
JavaScript 中 avalon绑定属性总结
2016/10/19 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
canvas实现绘制吃豆鱼效果
2017/01/12 Javascript
AngularJS封装$http.post()实例详解
2017/05/06 Javascript
vue实现长图垂直居上 vue实现短图垂直居中
2017/10/18 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
javascript实现鼠标点击生成文字特效
2019/12/24 Javascript
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
python中图像通道分离与合并实例
2020/01/17 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
Python实现疫情地图可视化
2021/02/05 Python
css3 box-shadow阴影(外阴影与外发光)图示讲解
2017/08/11 HTML / CSS
Blank NYC官网:夹克、牛仔裤等
2020/12/16 全球购物
自1926年以来就为冰岛保持温暖:66°North
2020/11/27 全球购物
abstract是什么意思
2012/02/12 面试题
腾讯公司的一个sql题
2013/01/22 面试题
化学教师自荐信范文
2013/12/28 职场文书
创业资金计划书
2014/02/06 职场文书
学校消防演习方案
2014/02/19 职场文书
学校就业推荐信范文
2014/05/19 职场文书
党性观念心得体会
2014/09/03 职场文书
教育教学读书笔记
2015/07/02 职场文书
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL
详解thinkphp的Auth类认证
2021/05/28 PHP