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 socket 超时设置 errno 10054
Jul 01 Python
Python3.6 Schedule模块定时任务(实例讲解)
Nov 09 Python
Python实现带参数与不带参数的多重继承示例
Jan 30 Python
python微信跳一跳系列之棋子定位像素遍历
Feb 26 Python
python实现ID3决策树算法
Aug 29 Python
Python3的介绍、安装和命令行的认识(推荐)
Oct 20 Python
Python中format()格式输出全解
Apr 12 Python
python类的实例化问题解决
Aug 31 Python
Python函数的定义方式与函数参数问题实例分析
Dec 26 Python
Python中flatten( ),matrix.A用法说明
Jul 05 Python
python 绘制场景热力图的示例
Sep 23 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
Nov 13 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
火影忍者:这才是千手柱间和扉间的真正死因,角都就比较搞笑了!
2020/03/10 日漫
laravel-admin 中列表筛选方法
2019/10/03 PHP
PHP7 其他语言层面的修改
2021/03/09 PHP
不要小看注释掉的JS 引起的安全问题
2008/12/27 Javascript
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
jQuery如何取id有.的值一般的方法是取不到的
2014/04/18 Javascript
javascript时间函数大全
2014/06/30 Javascript
javascript手工制作悬浮菜单
2015/02/12 Javascript
jquery获取及设置outerhtml的方法
2015/03/09 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
2015/04/12 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
Vue项目webpack打包部署到服务器的实例详解
2017/07/17 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
解决vue-cli webpack打包后加载资源的路径问题
2018/09/25 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
2019/03/29 Javascript
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
2018/02/07 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
通过字符串导入 Python 模块的方法详解
2019/10/27 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
python判断变量是否为列表的方法
2020/09/17 Python
Python txt文件如何转换成字典
2020/11/03 Python
python UIAutomator2使用超详细教程
2021/02/19 Python
飞利浦法国官网:Philips法国
2019/07/10 全球购物
冰淇淋开店创业计划书
2014/02/01 职场文书
上课打牌的检讨书
2014/02/15 职场文书
揭牌仪式主持词
2014/03/19 职场文书
工伤赔偿协议书范本
2014/04/15 职场文书
2014年房产经纪人工作总结
2014/12/08 职场文书
春季运动会加油词
2015/07/18 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
Vue+Element UI实现概要小弹窗的全过程
2021/05/30 Vue.js
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫