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 13 Python
基于Python log 的正确打开方式
Apr 28 Python
解决Tensorflow使用pip安装后没有model目录的问题
Jun 13 Python
使用Python进行目录的对比方法
Nov 01 Python
python下载微信公众号相关文章
Feb 26 Python
numpy linalg模块的具体使用方法
May 26 Python
解析python的局部变量和全局变量
Aug 15 Python
python 字典有序并写入json文件过程解析
Sep 30 Python
python实现文件分片上传的接口自动化
Nov 19 Python
python 基于selenium实现鼠标拖拽功能
Dec 24 Python
Pytorch 如何实现LSTM时间序列预测
May 17 Python
Django实现drf搜索过滤和排序过滤
Jun 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
js下函数般调用正则的方法附代码
2008/06/22 PHP
php判断手机访问还是电脑访问示例分享
2014/01/20 PHP
php获取文件夹路径内的图片以及分页显示示例
2014/03/11 PHP
PHP7.0安装笔记整理
2015/08/28 PHP
浅析php如何实现爬取数据原理
2018/09/27 PHP
Laravel 登录后清空COOKIE的操作方法
2019/10/14 PHP
firefox火狐浏览器与与ie兼容的2个问题总结
2010/07/20 Javascript
关于javascript中的typeof和instanceof介绍
2012/12/04 Javascript
javascript父子页面通讯实例详解
2015/07/17 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
javascript数字验证的实例代码(推荐)
2016/08/20 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
浅谈express 中间件机制及实现原理
2017/08/31 Javascript
详解vue-cli 构建项目 vue-cli请求后台接口 vue-cli使用axios、sass、swiper
2018/05/28 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
vscode下的vue文件格式化问题
2018/11/28 Javascript
JavaScript模块管理的简单实现方式详解
2019/06/15 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
原生js实现的观察者和订阅者模式简单示例
2020/04/18 Javascript
如何利用node转发请求详解
2020/09/17 Javascript
Python+PIL实现支付宝AR红包
2018/02/09 Python
python实现决策树ID3算法的示例代码
2018/05/30 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
2019/08/05 Python
Python bisect模块原理及常见实例
2020/06/17 Python
python实现猜数游戏(保存游戏记录)
2020/06/22 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
python音频处理的示例详解
2020/12/23 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
地球上最先进的胡子和头发修剪器:Bevel
2018/01/23 全球购物
联想德国官网:Lenovo Germany
2018/07/04 全球购物
县优秀教师事迹材料
2014/01/31 职场文书
质量承诺书范文
2014/03/27 职场文书
食品销售计划书
2014/04/26 职场文书
应用外语系自荐信
2014/06/26 职场文书
医学专业毕业生推荐信
2014/07/12 职场文书
2014年国庆节活动总结
2014/08/26 职场文书