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 cookielib 登录人人网的实现代码
Dec 19 Python
Python使用PIL模块生成随机验证码
Nov 21 Python
详细解读tornado协程(coroutine)原理
Jan 15 Python
selenium+python 去除启动的黑色cmd窗口方法
May 22 Python
对python添加模块路径的三种方法总结
Oct 16 Python
详解python多线程之间的同步(一)
Apr 03 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
Dec 26 Python
Python imutils 填充图片周边为黑色的实现
Jan 19 Python
Python如何通过百度翻译API实现翻译功能
Apr 02 Python
python实现网页录音效果
Oct 26 Python
Python使用pyenv实现多环境管理
Feb 05 Python
教你利用python实现企业微信发送消息
May 23 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/12/05 PHP
PHP 向右侧拉菜单实现代码,测试使用中
2009/11/03 PHP
基于php实现七牛抓取远程图片
2015/12/01 PHP
利用PHP生成静态html页面的原理
2016/09/30 PHP
PHP如何防止XSS攻击与XSS攻击原理的讲解
2019/03/22 PHP
[原创]图片分页查看
2006/08/28 Javascript
javascript学习笔记之10个原生技巧
2014/05/21 Javascript
js+CSS实现弹出居中背景半透明div层的方法
2015/02/26 Javascript
jquery操作angularjs对象
2015/06/26 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
2017/08/07 Javascript
详解vue-cli项目中的proxyTable跨域问题小结
2018/02/09 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
微信小程序自定义tabBar组件开发详解
2020/09/24 Javascript
JavaScript观察者模式原理与用法实例详解
2020/03/10 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
python实现飞机大战微信小游戏
2020/03/21 Python
python实现按行分割文件
2019/07/22 Python
python自定义时钟类、定时任务类
2021/02/22 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
在Python中预先初始化列表内容和长度的实现
2019/11/28 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
Python tkinter实现日期选择器
2021/02/22 Python
枚举与#define宏的区别
2014/04/30 面试题
幼儿园教师教育感言
2014/02/28 职场文书
酒店管理专业毕业生求职自荐信
2014/04/28 职场文书
2014大学生职业生涯规划书最新范文
2014/09/13 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
大学生党员批评与自我批评范文
2014/10/14 职场文书
导游词之临安白水涧
2019/11/05 职场文书
JS中一些高效的魔法运算符总结
2021/05/06 Javascript
nginx配置限速限流基于内置模块
2022/05/02 Servers