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中何种情况下需要使用断言
Apr 01 Python
在Python的Flask框架中实现全文搜索功能
Apr 20 Python
Django视图和URL配置详解
Jan 31 Python
Python全排列操作实例分析
Jul 24 Python
python3基于TCP实现CS架构文件传输
Jul 28 Python
浅谈python下含中文字符串正则表达式的编码问题
Dec 07 Python
python控制nao机器人身体动作实例详解
Apr 29 Python
如何使用pyinstaller打包32位的exe程序
May 26 Python
OpenCV+python实现实时目标检测功能
Jun 24 Python
详解Flask前后端分离项目案例
Jul 24 Python
Python如何解除一个装饰器
Aug 07 Python
Python基础学习之奇异的GUI对话框
May 27 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
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
php中curl和file_get_content的区别
2014/05/10 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
PHP通过API获取手机号码归属地
2015/05/28 PHP
利用php的ob缓存机制实现页面静态化方法
2017/07/09 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
JavaScript下申明对象的几种方法小结
2008/10/02 Javascript
javascript new fun的执行过程
2010/08/05 Javascript
异步加载script的代码
2011/01/12 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
a标签click和href执行顺序探讨
2014/06/23 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
javascript实现获取服务器时间
2015/05/19 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
Javascript实现倒计时时差效果
2017/05/18 Javascript
AngularJS 支付倒计时功能实现思路
2017/06/05 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
2017/07/18 jQuery
vue-resouce设置请求头的三种方法
2017/09/12 Javascript
常用的9个JavaScript图表库详解
2017/12/19 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
详解python中递归函数
2019/04/16 Python
python 中关于pycharm选择运行环境的问题
2020/10/31 Python
Python数据模型与Python对象模型的相关总结
2021/01/26 Python
使用Python爬取小姐姐图片(beautifulsoup法)
2021/02/11 Python
英国最大的汽车交易网站:Auto Trader UK
2016/09/23 全球购物
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
教师优秀党员事迹材料
2014/08/14 职场文书
有限公司股东合作协议书
2014/10/29 职场文书
上诉答辩状范文
2015/05/22 职场文书
Redis 限流器
2022/05/15 Redis
Java处理延时任务的常用几种解决方案
2022/06/01 Java/Android