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计算三角函数之asin()方法的使用
May 15 Python
利用Python爬取微博数据生成词云图片实例代码
Aug 31 Python
Python实现的十进制小数与二进制小数相互转换功能
Oct 12 Python
Python基于贪心算法解决背包问题示例
Nov 27 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
Apr 17 Python
python在回调函数中获取返回值的方法
Feb 22 Python
Pytorch 保存模型生成图片方式
Jan 10 Python
python梯度下降算法的实现
Feb 24 Python
如何利用python 读取配置文件
Jan 06 Python
MATLAB 如何求取离散点的曲率最大值
Apr 16 Python
教你如何用Python实现人脸识别(含源代码)
Jun 23 Python
利用Python实时获取steam特惠游戏数据
Jun 25 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创建者模式
2014/11/25 PHP
php解析字符串里所有URL地址的方法
2015/04/03 PHP
PHP的Laravel框架中使用消息队列queue及异步队列的方法
2016/03/21 PHP
php+ajax登录跳转登录实现思路
2016/07/31 PHP
php工具型代码之印章抠图
2018/07/18 PHP
thinkphp5 模型实例化获得数据对象的教程
2019/10/18 PHP
JQuery中DOM实现事件移除的方法
2015/06/13 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
JavaScript获取键盘按键的键码(参照表)
2017/01/10 Javascript
javascript事件的传播基础实例讲解(35)
2017/02/14 Javascript
javascript DOM的详解及实例代码
2017/03/06 Javascript
JavaScript获取URL参数的方法之一
2017/03/24 Javascript
Vuex简单入门
2017/04/19 Javascript
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
原生javascript AJAX 三级联动的实现代码
2018/05/04 Javascript
Python守护进程(daemon)代码实例
2015/03/06 Python
python处理csv数据的方法
2015/03/11 Python
Python正则表达式完全指南
2017/05/25 Python
windows下python之mysqldb模块安装方法
2017/09/07 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
详解python-图像处理(映射变换)
2019/03/22 Python
Python中判断子串存在的性能比较及分析总结
2019/06/23 Python
Python中新式类与经典类的区别详析
2019/07/10 Python
Python面向对象原理与基础语法详解
2020/01/02 Python
Python监听剪切板实现方法代码实例
2020/11/11 Python
html5使用canvas绘制太阳系效果
2014/12/15 HTML / CSS
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
高中毕业生登记表自我鉴定范文
2014/03/18 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
审计专业自荐信范文
2014/04/21 职场文书
初中生评语大全
2014/04/24 职场文书
公司周年庆寄语
2019/06/21 职场文书
Python jiaba库的使用详解
2021/11/23 Python
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers