码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • OpenCV 卷积运算和卷积核


    卷积运算和卷积核

    图像运算中经常会碰到卷积运算这个讲法, 初看不知道具体含义, 其实非常简单, 工作原理如下:

    1. 首先提供一个小的矩阵, 一般是3*3, 或者是 5*5 或者是 7*7, 一般是方形矩阵, 维度为奇数, 这样中心点可以作为锚点, 矩阵中的元素取值多为很小的整数(或正或负或零), 该矩阵被叫做 kernel 或卷积核.
    2. 图像中每个点的最终取值, 需要和 kernel矩阵做个运算才能得到该点的最终取值, 计算过程为: 先将卷积核的锚点对中图像上要计算的点, 这样核矩阵和图像上一小块区域会重叠, 我们将重叠部分各个点做乘法运算, 并将乘积相加作为计算点的最终取值.
    3. 很显然, 卷积运算其实就是对原图像各点进行了加权平均, 卷积核上各点数值相当于权重, 一般图像往往具备各方同性特征, 所以我们一般选择核中心点作为锚点, 同时选择奇数维度的矩阵, 这样的矩阵中心点就非常明确.

    卷积核的构建

    OpenCV中的结构化元素专指数值为0和1的卷积核矩阵, 当然卷积核矩阵并不要要求数值一定是1或1.

    1. 手工构建: 卷积核就是个矩阵, 所以我们可以先创建一个Mat, 然后手工设定各位置取值就可以.
    2. 构建全为1元素的矩阵, 下面两个写法等价.
    1. Mat element1 = Mat.Ones(3, 3, MatType.CV_8UC1);
    2. Mat element2 = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(3, 3));
    3. [ 1, 1, 1, 1, 1;
    4. 1, 1, 1, 1, 1;
    5. 1, 1, 1, 1, 1;
    6. 1, 1, 1, 1, 1;
    7. 1, 1, 1, 1, 1]
    1. 构建是十字线为1的矩阵, 其他元素都为0
    1. Mat element3 = Cv2.GetStructuringElement(MorphShapes.Cross, new OpenCvSharp.Size(3, 3));
    2. [ 0, 0, 1, 0, 0;
    3. 0, 0, 1, 0, 0;
    4. 1, 1, 1, 1, 1;
    5. 0, 0, 1, 0, 0;
    6. 0, 0, 1, 0, 0]
    1. 构建是椭圆形矩阵, 椭圆形区域内的元素为1, 其他元素都为0
    1. Mat element4 = Cv2.GetStructuringElement(MorphShapes.Cross, new OpenCvSharp.Size(5, 5));
    2. [ 0, 0, 1, 0, 0;
    3. 0, 0, 1, 0, 0;
    4. 1, 1, 1, 1, 1;
    5. 0, 0, 1, 0, 0;
    6. 0, 0, 1, 0, 0]

    参考

    https://zhuanlan.zhihu.com/p/273475106https://blog.csdn.net/Vermont_/article/details/108424547

  • 相关阅读:
    使用Express框架操作MongoDB数据库
    结构体几种实用的用法
    中文核心论文写作经验总结和工具推荐
    小红书笔记关键词规范
    浅浅的 linux 串口驱动应用
    RabbitMQ 模拟实现【六】:程序模拟实现
    6.26CF模拟赛E:价格最大化题解
    什么是tomcat?tomcat是干什么用的?
    CSS - PC / 移动端左右满屏高度布局(100% 高度 + 溢出滚动条)
    uniapp:APP开发,后台保活
  • 原文地址:https://blog.csdn.net/csdnharrychinese/article/details/134509467
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号