Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧。

Python OpenCV

  • 基础知识铺垫
  • 函数原型介绍
    • 均值模糊
    • 中值模糊
    • 2D 卷积(图像滤波),自定义模糊
  • 橡皮擦的小节
  • 推荐阅读

基础知识铺垫

Python OpenCV 中模糊操作的原理是:

基于离散卷积、定义好每个卷积核、不同卷积核得到不同的卷积效果、模糊是卷积的一种表象。橡皮擦表示没看懂,先在脑子中有个大概印象就行,毕竟才学习 20 多天。

本篇博客要学习的模糊有

  1. 均值模糊:一般用来处理图像的随机噪声;
  2. 中值模糊:一般用来处理图像的椒盐噪声;
  3. 自定义模糊:对图像进行增强,锐化等操作。

函数原型介绍

均值模糊

概念:

均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围 8 个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。

哇哦,没看懂,直接看一下原型吧,先用起来,在复盘理论。

cv2.blur(src, ksize[, dst[, anchor[, borderType]]]) -> dst

参数说明:

  • src:待处理图像,熟悉参数;
  • ksize:表示模糊内核大小。比如(5,5)表示生成的模糊内核是一个 5*5 的矩阵;
  • dst:表示输出与 src 相同大小和类型的图像;
  • anchor:可选参数
  • borderType:可选参数

测试代码如下:

import cv2 as cv
import numpy as npdef blur_demo(src):dst = cv.blur(src, (5, 5))cv.imshow("blur_demo", dst)if __name__ == "__main__":src = cv.imread("./1.jpg")blur_demo(src)cv.waitKey()cv.destroyAllWindows()

中值模糊

概念(读一读就行了):

中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。

函数原型如下:

cv2.medianBlur(src, ksize[, dst]) -> dst

参数说明:

  • src:待处理的输入图像;
  • ksize:参数表示滤波窗口尺寸,必须是奇数并且大于 1。比如这里是 5,中值滤波器就会使用 5×5 的范围来计算,即对像素的中心值及其 5×5 邻域组成了一个数值集,对其进行处理计算,当前像素被其中值替换掉;
  • dst:参数表示输出与 src 相同大小和类型的图像。

中值模糊一般用在存在一些躁声点图像,例如白噪声,可以去除。

首先通过下述代码制造一张椒盐图片。

import numpy as np
import random
import cv2def sp_noise(image, prob):output = np.zeros(image.shape, np.uint8)thres = 1 - probfor i in range(image.shape[0]):for j in range(image.shape[1]):rdn = random.random()if rdn < prob:output[i][j] = 0elif rdn > thres:output[i][j] = 255else:output[i][j] = image[i][j]return outputimg = cv2.imread("./1.jpg")
# 添加椒盐噪声,噪声比例 0.02
out = sp_noise(img, prob=0.02)
cv2.imshow("img", out)
cv2.waitKey()

对上述代码生成的图片进行中值模糊操作。

# 中值模糊 ,去椒盐噪声
def median_blur_demo(src):dst = cv.medianBlur(src, 3)cv.imshow("dst", dst)

2D 卷积(图像滤波),自定义模糊

概念:

图像作为一个一维信号,也可以通过多种低通过滤器(low-pass filters, LPF)和高通过滤器(high-pass filters, HPF)来过滤。低通过滤器可以去除噪声,或者模糊图像。高通过滤器可以帮助在一个图像中找出边界。

函数原型为:

cv2.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]]) -> dst

参数说明:

  • src:待处理的输入图像;
  • ddepth:表示目标图像深度,输入值为-1 时,目标图像和原图像深度保持一致;
  • kernel::卷积核(或者是相关核),一个单通道浮点型矩阵。修改 kernel 矩阵即可实现不同的模糊;
  • anchor:可选参数,内核的锚点,指示内核中过滤点的相对位置;锚应位于内核中;默认值(-1,-1)表示锚位于内核中心;
  • detal :可选参数,在将它们存储在 dst 中之前,将可选值添加到已过滤的像素中。类似于偏置;
  • borderType:可选参数,像素外推法

测试代码如下:

# 模糊操作
def filter2D_demo(src):# 除以 25 是防止溢出kernel = np.ones([5,5],np.float32)/25dst = cv.filter2D(src,-1,kernel=kernel)cv.imshow("dst",dst)

运行效果:

使用 filter2D 函数,实现锐化。

def filter2D_demo(src):# 当kernel总和为 1 时:增强锐化# 当kernel总和为 0 时:边缘梯度kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)dst = cv.filter2D(src, -1, kernel=kernel)cv.imshow("dst", dst)

注意上述代码中 kernel 对应的数组中,各个值都为奇数,总和要等于 1,才是锐化。

橡皮擦的小节

本系列博客为学习之旅,部分概念在没有学到,或者必须彻底掌握前,不做扩展学习。保持每天 1 个小时的学习时间即可。

1 个小时又过去了,对 Python OpenCV 相关的知识点,你掌握了吗?

做为初学者,还有很多地方学习的不深入,希望你与我一起坚持下去。

推荐阅读

空闲之余,可以订阅橡皮擦的爬虫百例课程学习爬虫知识。

想学 Python 爬虫,可以订阅橡皮擦专栏哦~

Python OpenCV 图片模糊操作 blur 与 medianBlur相关推荐

  1. 2020-12-03 Python OpenCV: 图片的裁剪

    Python OpenCV: 图片的裁剪 图片裁剪使用img[y0:y1, x0:x1],其中参数分别代表y轴和x轴的起始坐标,具体使用方法如下: import cv2img = cv2.imread ...

  2. Python OpenCV 图片滑块验证码 滑块图片验证码 快速自动识别方案 代码简单 模板匹配识别 识别成功率达90%+

    前言 通过上一篇的文章大家已经对图片滑块验证码已经有了初步的了解,图片滑块验证码的核心关键在于图片识别接下来接入讲解.因为初版滑块图片识别虽然能识别验证码,通过一些策略调整也相对提高了一些图片识别率, ...

  3. python opencv 图片/视频 拼接

    python opencv 图片/视频 拼接 # coding: utf-8 # 像写诗一样写代码 import numpy as np import cv2img_A_path = "C: ...

  4. Python + OpenCV 图片合成视频遇到的问题

    Python + OpenCV 图片合成视频遇到的问题 其中cv2.VideoWriter 中的四个参数: 文件名 视频编码格式 帧率 视频的宽度和高度 注意:需要合成的视频和对应图片的宽度和高度要相 ...

  5. Python OpenCV 图片高斯模糊

    Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧. Python OpenCV 基础知识铺垫 函数原型介绍 高斯模糊(Gaussian Blur) 橡皮擦的小节 基础知识铺垫 ...

  6. python opencv图片放大 缩小_Python OpenCV之图片缩放的实现(cv2.resize)

    OpenCV函数原型: cv2.resize(InputArray src, OutputArray dst, Size, fx, fy, interpolation) 参数解释: InputArra ...

  7. python OpenCV 图片相似度 5种算法

    原始两张图片: 代码运行结果如下. 5种算法 值哈希算法.差值哈希算法和感知哈希算法都是值越小,相似度越高,取值为0-64,即汉明距离中,64位的hash值有多少不同. 三直方图和单通道直方图的值为0 ...

  8. [python ][opencv][图片卡通化]

    按顺序:               处理后的图片                待处理图片                源文件 下面是代码: import os import cv2def car ...

  9. python opencv 图片 算术运算

    import numpy as np import cv2 x = np.uint8([250]) y = np.uint8([10])# OpenCV相加是一个渗透运算,而Numpy的相加是模运算. ...

最新文章

  1. 切换apache的prefork和worker模式
  2. word图片自动换行不亮_知网查重时提交pdf检测结果竟然比Word高很多!
  3. VirtualCopy()操作I/O口 物理地址为什么要移8位
  4. 【转】刨根究底字符编码之九——字符编码方案的演变与字节序
  5. 老男孩教育每日一题-124天:当我们使用ssh-keygen命令的时候,如何一键非交互生产密钥对呢?...
  6. mysql报错ERROR 1045 (28000)
  7. 面试准备每日五题:C++(五)——野指针、句柄指针、newdeletemallocfree、extern、类成员权限
  8. C语言宏定义,内置宏的用法
  9. 除了 DBA, SQL 人还能胜任的黄金职业
  10. [ustc]那些杀手不太冷
  11. GPD MicroPC 安装 Win10+Ubuntu 双系统
  12. html操作sqlite,JavaScript操作sqlite
  13. 【转】抽象基类与接口,共性与个性的选择!
  14. html表格填充空白单元格,Excel表格数据录入:怎么快速填充所有空白单元格?
  15. 左连接,右连接与自然连接语法以及注意点
  16. (n++)+(n++)+(n++)与(++n)+(++n)+(++n)的区别
  17. JS:关于邮箱的正则表达式及规则
  18. 使用npm下载包,报错 error An unexpected error occurred: “EPERM: operation not permitted
  19. 转:关于正太分布和多维正态分布的理解(知乎)
  20. linux 磁盘分区的原理,linux磁盘—分区原理

热门文章

  1. [机器学习笔记] 用Python分析:红葡萄酒质量分析(数据探索)
  2. 转载:windows指令
  3. 0基础学原画多久入行?看看你还差什么?
  4. java统计词频算法_Java实现的词频统计——功能改进
  5. 1T和12T单片机的区别
  6. Word04---字体
  7. 为什么说Java中只有值传递
  8. http://myproducts.ca/here.php,外研(新标准)版
  9. 程序员眼中最牛的UI设计师是怎样的?
  10. Python函数和装饰器