在其官方文档中,filter2D()函数在掩模板介绍中一笔带过,我认为该函数应该进行详细介绍。 
对于使用掩模板矩阵(kernel)计算每个像素值,结合函数filter2D()函数,其定义如下:

CV_EXPORTS_W void filter2D( InputArray src, OutputArray dst, int ddepth,InputArray kernel, Point anchor=Point(-1,-1),double delta=0, int borderType=BORDER_DEFAULT );
  • 1
  • 2
  • 3

其官方指导文件对filter2D()函数的描述为:Convolves an image with kernel即利用内核实现对图像的卷积运算。参数含义如下:

InputArray src: 输入图像

OutputArray dst: 输出图像,和输入图像具有相同的尺寸和通道数量

int ddepth: 目标图像深度,如果没写将生成与原图像深度相同的图像。原图像和目标图像支持的图像深度如下:

    src.depth() = CV_8U, ddepth = -1/CV_16S/CV_32F/CV_64Fsrc.depth() = CV_16U/CV_16S, ddepth = -1/CV_32F/CV_64Fsrc.depth() = CV_32F, ddepth = -1/CV_32F/CV_64Fsrc.depth() = CV_64F, ddepth = -1/CV_64F
  • 1
  • 2
  • 3
  • 4
  • 5

当ddepth输入值为-1时,目标图像和原图像深度保持一致。

InputArray kernel: 卷积核(或者是相关核),一个单通道浮点型矩阵。如果想在图像不同的通道使用不同的kernel,可以先使用split()函数将图像通道事先分开。

Point anchor: 内核的基准点(anchor),其默认值为(-1,-1)说明位于kernel的中心位置。基准点即kernel中与进行处理的像素点重合的点。

double delta: 在储存目标图像前可选的添加到像素的值,默认值为0

int borderType: 像素向外逼近的方法,默认值是BORDER_DEFAULT,即对全部边界进行计算。

该函数使用于任意线性滤波器的图像,支持就地操作。当其中心移动到图像外,函数可以根据指定的边界模式进行插值运算。函数实质上是计算kernel与图像的相关性而不是卷积: 
 
也就是说kernel并不是中心点的镜像,如果需要一个正真的卷积,使用函数flip()并将中心点设置为(kernel.cols - anchor.x - 1, kernel.rows - anchor.y -1). 
该函数在大核(11x11或更大)的情况下使用基于DFT的算法,而在小核情况下使用直接算法(使用createLinearFilter()检索得到). 
示例程序如下:

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>using namespace std;
using namespace cv;int main()
{Mat srcImage = imread("lena.jpg");//判断图像是否加载成功if(srcImage.data)cout << "图像加载成功!" << endl << endl;else{cout << "图像加载失败!" << endl << endl;return -1;}namedWindow("srcImage", WINDOW_AUTOSIZE);imshow("srcImage", srcImage);Mat kern = (Mat_<char>(3,3) << 0, -1 ,0,-1, 5, -1,0, -1, 0);Mat dstImage;filter2D(srcImage,dstImage,srcImage.depth(),kern);namedWindow("dstImage",WINDOW_AUTOSIZE);imshow("dstImage",dstImage);waitKey(0);return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

运行结果如下: 

与上一篇运行结果相比并没有黑边存在!

版权声明:本文为某博主原创文章,未经博主允许不得转载。链接: https://blog.csdn.net/keith_bb/article/details/53103026

opencv 图像卷积运算函数filter2D()相关推荐

  1. opencv学习(七)之图像卷积运算函数filter2D()

    接上篇 在其官方文档中,filter2D()函数在掩模板介绍中一笔带过,我认为该函数应该进行详细介绍. 对于使用掩模板矩阵(kernel)计算每个像素值,结合函数filter2D()函数,其定义如下: ...

  2. OpenCV 图像卷积:cv.filter2D() 函数详解

    API 照例,我们搬一下官网的 API: C++ void cv::filter2D(InputArray src,OutputArray dst,int ddepth,InputArray kern ...

  3. python二维图颜色函数_Python scipy的二维图像卷积运算与图像模糊处理操作示例

    本文实例讲述了Python scipy的二维图像卷积运算与图像模糊处理操作.分享给大家供大家参考,具体如下: 二维图像卷积运算 一 代码 import numpy as np from scipy i ...

  4. python 图像卷积_[卷积神经网络(CNN)中的卷积核到底是如何提取图像特征的(python实现图像卷积运算)]...

    1.前言 我们知道,卷积核(也叫滤波器矩阵)在卷积神经网络中具有非常重要的作用.说白了,CNN主要作用在于提取图像的各种特征图(feature maps). CNN主要是通过卷积运算来完成特征提取的. ...

  5. 基于MATLAB的图像卷积运算

    卷积简介 卷积广泛应用于信号.图像和机器学习等领域,但是对于非数学专业的同学来说,是一个比较陌生和懵懂的概念.卷积(Convolution)是数学上的一种积分变换,主要作用是为了获取某个函数的局部信息 ...

  6. 【Python+OpenCV 图像透视变换 warpPerspective函数】

    Python+OpenCV 图像透视变换 warpPerspective函数 1.函数介绍 2.代码实例 3.实现效果 1.函数介绍 warpPerspective():对图像进行透视变换.简单来说, ...

  7. OpenCV学习笔记(十)——图像卷积(cv.filter2D()、矩阵旋转cv.filp())

    目录 1 图像卷积过程 2 cv.filter2D() 3 cv.filp() 卷积运算在信号处理中十分常见,而图像信息可以看成一种信号.例如,图像的每一行可以看出测量亮度变化的信号,而每一列可以看作 ...

  8. OpenCV图像发现轮廓函数findContours()的使用

    OPenCV版本:4.4 IDE:VS2017 功能描述 简述:在一个二进制图像里发现轮廓. 函数在二进制图像中使用Suzuki85算法获取轮廓.轮廓对形状分析和目标检测与识别是一个有用的工具,用法见 ...

  9. Opencv之图像滤波:1.图像卷积(cv2.filter2D)

            写这些博客主要是记录自己学习Opencv的过程,也希望能帮助到大家. 在OpenCV中,允许用户自定义卷积核实现卷积操作,使用自定义卷积核实现卷积操作的函数是cv2.filter2D( ...

  10. opencv图像形态学运算

    [图像处理]轻松搞懂形态学处理(腐蚀.膨胀.开闭运算) - 知乎 图像的腐蚀与膨胀 - 简书 图像膨胀&腐蚀 - outthinker - 博客园 图形算法与实战:3.图像最大连通域_进击的C ...

最新文章

  1. java字符编码问题_java 字符编码问题
  2. 空闲数据概念_计算机组成原理复习笔记——基础概念(二)
  3. vs找不到dll_零基础学习Python_绝对VS相对
  4. java程序发布成exe等
  5. 字符串的构造方法和直接创建
  6. C++ string 使用详解(含C++20新特性)
  7. php中的address,html中address是什么意思?(代码示例)
  8. 现代软件工程 第十一章 【软件设计与实现】 练习与讨论
  9. SQL2000无法建立管理单元
  10. 编程范式之字符和基本类型
  11. Overview of HEVC之4 帧内预测
  12. Python字符串等于
  13. 系列课程 ElasticSearch 之第 8 篇 —— SpringBoot 整合 ElasticSearch 做查询(分页查询)
  14. VMware9 绿色破解版 下载地址
  15. 把Date类型的Fri Feb 01 00:00:00 CST 2019转换成yyyy-MM-dd格式
  16. matlab异距分组直方图,如何绘制不等距分组的直方图?
  17. 小白入门之HTML--第五章 块状元素,行内元素,盒子模型
  18. 经典黑白搭配 现代简约风格设计美学精神
  19. 推荐系统组队学习03、矩阵分解
  20. 需求文档怎么写?这里有一套思维框架

热门文章

  1. Seaborn学习记录(1)
  2. 我的面试准备过程--队列与栈(更新中)
  3. MySQL查看数据库、表的占用空间大小
  4. 人和人之间不要靠的太近
  5. 解决12c安装过程中的各种报错
  6. 基于模板的代码生成器
  7. [梦]2005年9月1日
  8. R语言--自定义函数证明中心极限定理
  9. [2019.04.16] 由Python写成的自动解压脚本
  10. 使用GDB进行调试 -- 1 应用场景