opencv009 滤波器01(卷积)

图像卷积操作(convolution),或称为核操作(kernel),是进行图像处理的一种常用手段,

图像卷积操作的目的是利用像素点和其邻域像素之前的空间关系,通过加权求和的操作,实现模糊(blurring),锐化(sharpening),边缘检测(edge detection)等功能。

期末考试结束!又开始学习opencv啦

1、什么是图片卷积

图像卷积 就是 卷积核在图像上按行滑动遍历像素 时不断地相乘求和的过程

2D卷积需要4个嵌套循环4-double loop,所以它并不快,除非我们使用很小的卷积核。这里一般使用3x3或者5x5。而且,对于滤波器,也有一定的规则要求:

1)滤波器的大小应该是奇数,例如3x3,5x5或者7x7。(原因后面会提到)

2)滤波器矩阵所有的元素之和应该要等于1,这是为了保证滤波前后图像的亮度保持不变。当然了,这不是硬性要求了。

3)如果滤波器矩阵所有元素之和大于1,那么滤波后的图像就会比原图像更亮,反之,如果小于1,那么得到的图像就会变暗。如果和为0,图像不会变黑,但也会非常暗。

4)对于滤波后的结构,可能会出现负数或者大于255的数值。对这种情况,我们将他们直接截断到0和255之间即可。对于负数,也可以取绝对值。

步长

**步长就是卷积核在图像上移动的步幅,**充分扫描图片,步长一般为1

下例步长为2(不太常见)

padding

上面的例子中发现,卷积操作后图片的长宽会变小,如果要保持图片大小不变,我们需要在图片的周围填充0,padding指的是填充0的圈数

可以通过公式计算出需要填充的0的圈数

右下角的公式是P=(F-1)/2

(自动认为步长为0哈)

卷积核的大小

滤波器的大小应该是奇数。

  • 这样它才有一个中心,例如3x3,5x5或者7x7。有中心了,也有了半径的称呼,例如5x5大小的核的半径就是2。
  • 根据上面的padding公式,如果保持图片大小不变,采用偶数卷积核的话,比如4*4,将会出现填充1.5圈0的情况
  • 有中心,指出滤波器的位置,即opencv卷积中的锚点

卷积案例

函数

python 复制代码
filter2D(src, ddepth, kernel[, dst[,anchor[,delta[,borderType]]]])
  • ddepth是卷积之后的位深,即卷积之后图片的位深,即卷积之后图片的数据类型,一般设为-1,表示和原图类型一致
  • kernel是卷积核大小,用元组或者ndarray表示,要求数据类型必须是float型
  • anchor锚点,即卷积核的中心点,是可选参数,默认值是(-1,-1)
  • delta 可选参数,表示卷积之后额外加一个值,相当于线性方程中的偏差,默认是0
  • borderType边界类型,一般不设

模糊

实例:

python 复制代码
import cv2
import numpy as np
img = cv2.imread("F:\est01\e3.jpg")
kernel = np.ones((5, 5), np.float32)/25
# 卷积操作
dst = cv2.filter2D(img, -1, kernel)
cv2.imshow('img', np.hstack((img, dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()

其他函数说明:

1、np.ones()函数

返回给定形状和数据类型的新数组,其中元素的值设置为1。此函数与numpy zeros()函数非常相似。

python 复制代码
np.ones(shape, dtype=None, order='C')
  • shape:一个整数类型或者一个整数元组,用于定义数组的大小。如果仅指定一个整数类型变量,则返回一维数组。如果指定的是整数元组,则返回给定形状的数组。
  • dtype:可选参数,默认值为float。用于指定数组的数据类型。
  • order:指定内存重以行优先('C')还是列优先('F')顺序存储多维数组。
2、拼接数组

np.vstack():在竖直方向上堆叠

np.hstack():在水平方向上平铺

就是相当于两张图片组合到一块

结果:

python 复制代码
np.ones((5, 5), np.float32)/25

结合上面的原理,/25相当于取平均值,所以就是模糊的效果了

相关推荐
秃头佛爷38 分钟前
Python学习大纲总结及注意事项
开发语言·python·学习
昨日之日20062 小时前
Moonshine - 新型开源ASR(语音识别)模型,体积小,速度快,比OpenAI Whisper快五倍 本地一键整合包下载
人工智能·whisper·语音识别
浮生如梦_2 小时前
Halcon基于laws纹理特征的SVM分类
图像处理·人工智能·算法·支持向量机·计算机视觉·分类·视觉检测
深度学习lover2 小时前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别
dayouziei3 小时前
java的类加载机制的学习
java·学习
热爱跑步的恒川3 小时前
【论文复现】基于图卷积网络的轻量化推荐模型
网络·人工智能·开源·aigc·ai编程
API快乐传递者3 小时前
淘宝反爬虫机制的主要手段有哪些?
爬虫·python
阡之尘埃5 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
dsywws6 小时前
Linux学习笔记之vim入门
linux·笔记·学习
孙同学要努力7 小时前
全连接神经网络案例——手写数字识别
人工智能·深度学习·神经网络