码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Python机器视觉--OpenCV进阶(核心)--滤波器之卷积介绍


    滤波器之卷积介绍

    1.卷积

    1.1 什么是图片卷积

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

    请添加图片描述

    1.2 卷积步长

    步长就是卷积核在图像上移动的步幅. 上面例子中卷积核每次移动一个像素步长的结果, 如果将这个步长修改为2, 结果会如何?

    为了充分扫描图片, 步长一般设为1.

    请添加图片描述

    1.2 Padding 填充

    从上图例子中我们发现, 卷积之后图片的长宽会变小. 如果要保持图片大小不变, 我们需要在图片周围填充0. padding指的就是填充的0的圈数.
    请添加图片描述

    填充 Padding 圈数的计算

    请添加图片描述

    如果要保持卷积之后图片大小不变, 可以得出等式: ( N + 2 P − F + 1 ) = N (N + 2P - F + 1) = N (N+2P−F+1)=N 从而可以推导出 P = F − 1 2 P = \frac{F -1}{2} P=2F−1​

    1.2 卷积核的大小

    图片卷积中, 卷积核一般为奇数, 比如 3 * 3, 5 * 5, 7 * 7.为什么一般是奇数呢, 出于以下两个方面的考虑:

    1. 根据上面padding的计算公式, 如果要保持图片大小不变, 采用偶数卷积核的话, 比如4 * 4, 将会出现填充1.5圈零的情况.
    2. 奇数维度的过滤器有中心,便于指出过滤器的位置, 即OpenCV卷积中的锚点.

    2.OpenCV中实现卷积的函数

    • filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])
      • ddepth是卷积之后图片的位深, 即卷积之后图片的数据类型, 一般设为-1, 表示和原图类型一致.
      • kernel是卷积核大小, 用元组或者ndarray表示, 要求数据类型必须是float型.
      • anchor 锚点, 即卷积核的中心点, 是可选参数, 默认是(-1,-1)
      • delta 可选参数, 表示卷积之后额外加的一个值, 相当于线性方程中的偏差, 默认是0.
      • borderType 边界类型.一般不设.
    # OpenCV图像卷积操作
    import cv2
    import numpy as np
    
    #导入图片
    img = cv2.imread('./dog.jpeg')
    
    # 相当于原始图片中的每个点都被平均了一下, 所以图像变模糊了.
    kernel = np.ones((5, 5), np.float32) / 25
    # ddepth = -1 表示图片的数据类型不变
    dst = cv2.filter2D(img, -1, kernel)
    
    # 很明显卷积之后的图片模糊了.
    cv2.imshow('img', np.hstack((img, dst)))
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    效果如图

    请添加图片描述

  • 相关阅读:
    原型制作神器ProtoPie的使用&Unity与网页跨端交互
    SpringBoot+Vue项目自媒体社区平台
    Transphorm赢得美国能源部先进能源研究计划署的合同,提供具有双向电流和电压控制功能的新型四象限氮化镓开关
    python运行hhblits二进制命令的包装器类
    《迷失岛2》游戏开发框架开发日记:场景切换和淡入淡出效果
    Vue3最佳实践 第七章 TypeScript 中
    聊一聊 GDB 调试程序时的几个实用命令
    值得苦练的100道Python经典练手题,(附详细答案)
    [Linux] GRUB引导 学习笔记(一)
    Linux学习笔记——修改文件的所有者和所有组
  • 原文地址:https://blog.csdn.net/qq_43944517/article/details/126447584
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号