当前位置: 首页 > news >正文

【OpenCV】10 图像滤波

作用

将一幅图像通过滤波器转换为另一幅图像。
滤波器又称为卷积核,滤波过程称为卷积。

卷积核

卷积核一般为奇数,如 3x3 5x5 7x7

为什么取奇数?

  1. 增加padding
  2. 保证锚点在中间,防止图像偏移

大小的影响?

在深度学习中,卷积核越大,看到的信息(感受野)越多,提取的特征就越好,计算量就越大。

锚点

卷积核的中心

边界扩充

当卷积核 > 1 且不进行边界扩充,输出尺寸将相应缩小。
当卷积核以标准方式进行边界扩充,则输出数据的空间尺寸将与输入相等。
image

计算公式

输出图像大小N= ( 输入图像尺寸W - 卷积核大小F + 2 x 扩充尺寸P ) / 步长大小S + 1
步长大小默认为1

图像卷积

低通滤波和高通滤波

低通滤波:低于某个阀值的值可以通过。去除噪音和平滑图像。
高通滤波:高于某个阀值的值可以通过。查找图像边缘。

示例

image

import cv2
import numpy as npimg = cv2.imread('img/cat.jpg')kernel = np.ones((5, 5), np.float32) / 25dst = cv2.filter2D(img, -1, kernel)cv2.imshow('dst', dst)
cv2.imshow('img', img)
cv2.waitKey(0)

低通滤波

方盒滤波 boxFilter

image

当 normalize == true,a = 1 / (W x H) ,退化为均值滤波
当 normalize == false,a = 1

均值滤波 blur

image

import cv2
import numpy as npimg = cv2.imread('img/cat.jpg')dst = cv2.blur(img, (5, 5))cv2.imshow('dst', dst)
cv2.imshow('img', img)
cv2.waitKey(0)

高斯滤波 GaussianBlur

可以有效解决高斯噪点。
image

import cv2
import numpy as npimg = cv2.imread('img/cat.jpg')dst = cv2.GaussianBlur(img, ksize=(5, 5), sigmaX=100)cv2.imshow('dst', dst)
cv2.imshow('img', img)
cv2.waitKey(0)

中值滤波

可以有效解决胡椒噪点。
image

import cv2
import numpy as npimg = cv2.imread('img/cat.jpg')dst = cv2.medianBlur(img, 5)cv2.imshow('dst', dst)
cv2.imshow('img', img)
cv2.waitKey(0)

双边滤波

可以保留边缘,同时对边缘内的区域进行平滑处理。
主要作用是:美颜
image

image

import cv2
import numpy as npimg = cv2.imread('img/cat.jpg')dst = cv2.bilateralFilter(img, 7, 20, 50)cv2.imshow('dst', dst)
cv2.imshow('img', img)
cv2.waitKey(0)

高通滤波

Sobel算子

  • 先向x方向求导
  • 再向y方向求导
  • 最终结果:|G| = |Gx| + |Gy|
    kernelsize设为-1时退化为Scharr
    image
import cv2
import numpy as npimg = cv2.imread('img/chess.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, dst = cv2.threshold(gray, 210, 255, cv2.THRESH_BINARY)
img = cv2.convertScaleAbs(dst)  # 转换为绝对值并转为uint8dst_x = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=5)
dst_y = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=5)
dst = dst_x + dst_ycv2.imshow('dst_x', dst_x)
cv2.imshow('dst_y', dst_y)
cv2.imshow('img', img)
cv2.imshow('dst', dst)
cv2.waitKey(0)

Scharr算子

  • 与Sobel类似,只不过使用的kernel值不同
  • Scharr只能求x方向或y方向的边缘

Laplacian算子

  • 可以同时求2个方向的边缘
  • 对噪音敏感,一般需要先进行去噪
    image
import cv2
import numpy as npimg = cv2.imread('img/chess.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, dst = cv2.threshold(gray, 210, 255, cv2.THRESH_BINARY)
img = cv2.convertScaleAbs(dst)  # 转换为绝对值并转为uint8dst = cv2.Laplacian(img, cv2.CV_64F, ksize=5)cv2.imshow('img', img)
cv2.imshow('dst', dst)
cv2.waitKey(0)

边缘检测 Canny

1.高斯滤波降噪,使用5x5高斯滤波器。
2.在0度、45度、90度、135度四个方向上进行梯度计算。
3.取四个方向上的局部最大值,认为最大值对应的边缘最佳。
4.进行阈值计算,超过最大值的为边缘,低于最小值的非边缘,介于之间的根据连贯性判断。
image

import cv2
import numpy as npimg = cv2.imread('img/cat.jpg')dst = cv2.Canny(img, 100, 150)cv2.imshow('img', img)
cv2.imshow('dst', dst)
cv2.waitKey(0)
http://www.sczhlp.com/news/125561/

相关文章:

  • 基于java+springboot的社区居民诊疗健康管理系统(源代码+文档+讲解视频) - 指南
  • 时序数据库IoTDB的六大实用场景盘点 - 指南
  • word怎么做网站导航栏学做企业网站
  • ssh蒙语网站开发网站建设的缺点
  • 网站制作国内知名企业建设工程法律法规
  • 网站建设费可以走办公费吗网站音频播放器代码
  • 网站打开乱码dw2019网页制作教程
  • 网站流量突然暴增一个网站源码值多少钱
  • 50系GPU上安装MMCV
  • K8S的CoreDns配置文件添加域名解析
  • 20250308_信安一把梭_web
  • nodify_介绍及安装
  • 柴沟堡做网站公司网页导航栏设计图片
  • 用dw做网站时怎么添加弹窗seo排名第一
  • 怎样保存网站资料 做证据为什么企业要交税
  • 郑州整站关键词搜索排名技术python基础教程第二版课后答案
  • 怎么给自己的品牌做网站网站建设运营执行方案
  • 怎么用源代码做网站软件技术外包
  • 代销网站源码狮岭做包包的网站
  • 信誉好的模板网站建设做网站制作要多少费用
  • 做暖暖在线获取网站常熟公司网站建设电话
  • 如何构建embeding 的就是pytorch 中
  • 中国设计最好的网站洛阳做网站找哪家好
  • 网站开发一般用什么工具wordpress 验证百度网盟
  • 怎样自己做企业的网站企业名录搜索软件有哪些
  • php网站建设设计制作linux wordpress 主题下载
  • 做企业网站软件杭州企业推广网站
  • 在网站加上一个模块怎么做网页设计需要学什么编程语言
  • 广州网站运营专注乐云seo江苏网站开发
  • 东莞市公司网站建设品牌企业网站可以免费做吗