目录

  • 关于Opencv中Filter2D函数的补全方式
    • 环境
    • 验证
      • C++举例
      • Python举例

关于Opencv中Filter2D函数的补全方式

环境

OpenCV3.4.16(C++)
opencv-contrib-python 4.5.4.60(Python)

验证

Opencv函数filter2d(),一般用于图像卷积,其中关键参数,输入图像src,输出图像dst,卷积核kernel。
一般来说通过kernel进行卷积之后图像尺寸要比原图像尺寸小一点,为了保持图像大小不变,filter2d在进行运算前对src进行了补全操作。通常补全操作有补零,图像边缘扩展等,但是这都不是filter2d()的补全方式,尝试了多次,发现,无论是C++还是python,这里的补全方式均为沿边缘镜像扩展。

C++举例

代码如下所示

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main()
{Mat src = (Mat_<uint8_t>(1, 8) << 2,4,6,8,10,12,14,16);Mat kernel = (Mat_<float>(1, 2) << 1, 1);Mat dst1;filter2D(src, dst1, -1, kernel);cout<<"dst1:"<<dst1<<endl;return 0;
}

得到结果为:

对[[2, 4, 6, 8, 10, 12, 14, 16]]进行沿边缘镜像扩展(这里其实应该扩展到shape为(3,10),但是由于kernel的shape为(1,2),就只进行这个维度扩展了),得到
[[4,2,4,6,8,10,12,14,16,14]],然后kernel为[[1,1]],计算得到
[[4+2,2+4,4+6,6+8,8+10,10+12,12+14,14+16]];即为
[[6,6,10,14,18,22,26,30]]
至于为什么计算了4+2而没有计算16+14,那是因为filter2D的另一个参数anchor,此处默认值为(-1,-1),意为指向kernel的中心位置,因为此处kernel大小为(1,2),默认位置即为(0,1),若修改anchor参数为(0,0),那么kernel的锚点就在前面,这样就不会计算前面的4+2,而是计算尾部的16+14了,最后的输出也就变为[[6,10,14,18,22,26,30,30]]

Python举例

输入图像src,与卷积核kernel如下所示

输入src沿边缘镜像扩展后变为

最后进行卷积,得到最终结果

Python代码如下所示

import cv2
import numpy as npsrc = np.array(([4,2,1],[2,1,3],[5,1,1]), dtype="float32")
kernel = np.array(([1,2,3],[4,5,6],[-1,-2,-1]), dtype="float32")
dst = cv2.filter2D(src, -1, kernel)
print(dst)

得到最终结果如下:

关于Opencv中Filter2D函数的补全方式相关推荐

  1. linux 函数自动补全,Shell脚本中实现自动补全功能

    对于Linuxer来说,自动补全是再熟悉不过的一个功能了.当你在命令行敲下部分的命令时,肯定会本能地按下Tab键补全完整的命令,当然除了命令补全之外,还有文件名补全. Bash-completion ...

  2. imfilter c语言,opencv中cvFilter2D( ) 函数filter2D()函数与MATLAB中imfilter()函数的差异...

    出处: 1:cvFilter2D() 函数为opencv中c语言函数 2:filter2D()函数为opencv中c++函数 3:imfilter()函数为matlab版本函数 计算结果的异同: 2( ...

  3. linux shell中的命令自动补全(compgen complete)与 命令行参数解析

    linux shell中的命令自动补全(compgen complete)与 命令行参数解析 标签: shell脚本 2013-12-31 21:56 6661人阅读 评论(6) 收藏 举报 分类: ...

  4. 转载:opencv中imshow函数运行中断的解决办法

    OpenCV中 imshow函数运行中断的解决方法 羊和咩咩 2017-03-10 16:00:49 5919 收藏 最后发布:2017-03-10 16:00:49首发:2017-03-10 16: ...

  5. OpenCV中initUndistortRectifyMap函数存在bug原因探究

    原文首发于公众号「3D视觉工坊」:OpenCV中initUndistortRectifyMap函数存在bug原因探究. 最近在运行如下一段代码时,生成的mapx和mapy有点异常. 代码片段如下: # ...

  6. OpenCV使用filter2D函数填充线性滤波器的实例(附完整代码)

    OpenCV使用filter2D函数填充线性滤波器的实例 OpenCV使用filter2D函数填充线性滤波器的实例 OpenCV使用filter2D函数填充线性滤波器的实例 #include &quo ...

  7. python tab键自动补全_设置python中TAB键自动补全方法

    设置python中TAB键自动补全方法 一.创建自动补全脚本如下: vi /tmp/python/tab.py #!/usr/bin/python # python tab file import s ...

  8. 关于opencv中cvtcolor函数的code参数用CV_BGR2YUV与CV_BGR2YCrCb的了解

    根据Opencv中cvtcolor函数的源码描述,,参数CV_BGR2YCrCb用的系数为[1868, 9617, 4899, 11682, 9241], 而参数CV_BGR2YUV对应的系数只是将C ...

  9. Linux中 vim 实现代码补全

    Linux中 vim 实现代码补全 vim 中代码补全 步骤1:判断 步骤2:安装 `OmniCppComplete` 步骤3: 步骤4:些许其他操作 结果 利用 Tab 键进行补全 vim 中代码补 ...

最新文章

  1. 现代操作系统: 第八章 多处理机系统
  2. sql between...and 用法(mysql)
  3. python程序题斐波那契数列_Python_经典题_斐波那契数列
  4. c++ vs 输出log到窗口_欧冠豪门碰撞,尤文vs巴萨,曼联vs红牛
  5. tar 参数 m. linux,Linux tar命令参数详细说明
  6. C#~异步编程再续~你必须要知道的ThreadPool里的throw
  7. 【Elasticsearch】Elasticsearch filter和query的不同
  8. 提升研发效能没那么难,看优酷的最佳实践!
  9. 华为正式发布自有操作系统——鸿蒙 OS!
  10. 简述Java Object类中的方法有哪些
  11. 数据结构笔记(六)-- 双向链表
  12. Leetcode 863.二叉树中所有距离为K的结点
  13. Android开发时的多点触控是如何实现的?
  14. Discuz!NT v1.0 正式版发布
  15. The JRE you are running Eclipse with appears to not be a JDK .Spring Boot Live hovers will not work
  16. 传染病模型系统动力学VENSIM模拟
  17. 最适合学英语的50部动画电影(高清画质mkv,双语/双字幕可切换)
  18. Excel中的数字转文本和文本转数字
  19. 变频器在电机驱动中的作用
  20. 如何给自己的U盘自定义图标

热门文章

  1. 联动 地区城市的 转载
  2. 使用python制作的简易自习室座位预约系统
  3. android纯净版,纯净版Android4.0系统
  4. 哪些类型的企业需要进行等级保护_等保测评机构
  5. phalapi使用redis做MQ队列
  6. 【脱壳-寻找OEP】壳常用的函数寻找OEP
  7. 智慧食堂app技术服务支持
  8. 人体检测用于空洞和裂痕检测
  9. 解决element UI table 表格 固定列单元格错位
  10. 2239: 童年的圣诞树