【15】opencv卷积运算

article/2025/10/23 10:26:55

参考:

【OpenCV学习笔记】之卷积及卷积算子(convolution)_点滴成海~的博客-CSDN博客_卷积算子(关于卷积运算)

opencv RNG函数 - 0MrMKG - 博客园(对于RNG函数的解答)

(一)首先是对于边缘的填充(避免有些像素卷积不了)

C++ void copyMakeBorder(Mat src, // 输入图像Mat dst, // 添加边缘图像int top, // 边缘长度,一般上下左右都取相同值,int bottom,int left,int right, int borderType // 边缘类型Scalar value )

关于borderType的值:

- BORDER_CONSTANT – 填充边缘用指定像素值- BORDER_REPLICATE – 填充边缘像素用已知的边缘像素值。- BORDER_WRAP – 用另外一边的像素来补偿填充
下面实现对于图片边缘地区进行填补像素:#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{Mat Origin = imread("0003.jpg");if (!Origin.data){cout << "ERROR" << endl;return -1;}Mat OutPut1 = Mat(Origin.size(), Origin.type());Mat OutPut2 = Mat(Origin.size(), Origin.type());Mat OutPut3 = Mat(Origin.size(), Origin.type());int added_cols = Origin.cols * 0.06;int added_rows = Origin.rows * 0.06;RNG rng(14);Scalar color = (rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));copyMakeBorder(Origin, OutPut1, added_cols, added_cols, added_rows, added_rows,BORDER_ISOLATED, color);copyMakeBorder(Origin, OutPut2, added_cols, added_cols, added_rows, added_rows,BORDER_DEFAULT, color);copyMakeBorder(Origin, OutPut3, added_cols, added_cols, added_rows, added_rows, BORDER_CONSTANT, color);imshow("OUTPUT    BORDER_ISOLATED", OutPut1);imshow("OUTPUT    BORDER_DEFAULT", OutPut2);imshow("OUTPUT    BORDER_CONSTANT", OutPut3);waitKey(0);}

(二)卷积运算代码基础

<1>自定义卷积模糊:

卷积核的定义,以及调用卷积核的函数Api:

 Mat Model = (Mat_<char>(3,3) << 1, 0, 0, 0, 1, 0, 0, 0, 1);
C++ void filter2D(Mat src, //输入图像Mat dst, // 模糊图像int depth, // 图像深度32/8Mat kernel, // 卷积核/模板Point anchor, // 锚点位置double delta // 计算出来的像素+delta)其中 kernel是可以自定义的卷积核
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{Mat Input = imread("0004.jpg");Mat Output_1 = Mat(Input.size(), Input.type());Mat Output_2 = Mat(Input.size(), Input.type());Mat Output_3 = Mat(Input.size(), Input.type());if (!Input.data){cout << "ERROR" << endl;return -1;}Mat Model_1 = (Mat_<char>(3,3) << 0, 1 , 0, 0, 1, 0, 0, 1, 0);Mat Model_2 = (Mat_<char>(3, 3) << -1, 0, 1, -2, 0, 2, -1, 0, 1);Mat Model_3 = (Mat_<char>(3, 3) << 0, -1, 0, -1, 4, -1, 0, -1, 0);Point ANCHOR = Point(-1, -1);filter2D(Input, Output_1,-1, Model_1,ANCHOR,BORDER_DEFAULT);filter2D(Input, Output_2, -1, Model_2, ANCHOR,100, BORDER_DEFAULT);filter2D(Input, Output_3, -1, Model_3, ANCHOR,100 ,BORDER_DEFAULT);imshow("input", Input);imshow("output1", Output_1);imshow("output2", Output_2);imshow("output3", Output_3);waitKey(0);
}

<2>Sobel算子:

关于sobel算子具体内容,移步:

科学网—Sobel算子的数学基础 - 彭真明的博文

OpenCV函数Sobel算子详解-代码狗

C++ void Sobel ( InputArray Src // 输入图像OutputArray dst// 输出图像,大小与输入图像一致int depth // 输出图像深度. Int dx  // X方向,几阶导数int dy // Y方向,几阶导数 int ksize, SOBEL算子kernel大小,必须是1、3、5、7、double scale  = 1double delta = 0int borderType = BORDER_DEFAULT)参数解释:
src:原图ddepth:处理结果图像深度,一般我们都填-1,即与原图深度相同。但在这里我们需要填写cv2.CV_64F。简单来说就是如果填写-1,我们在计算梯度时产生的负数就会被程序默认为0,导致有一边的边缘出不来。而cv2.CV_64F范围更大,可以保留负数。dx:计算x方向的梯度dy:计算y方向的梯度ksize:卷积核的尺寸。默认为3,即3*3的矩阵。原文链接:https://blog.csdn.net/weixin_45939019/article/details/104410567
//改进版本的sobel算子:C++ void Scharr (                    InputArray Src // 输入图像                    OutputArray dst// 输出图像,大小与输入图像一致                    int depth // 输出图像深度.                     Int dx.  // X方向,几阶导数                    int dy // Y方向,几阶导数.                     double scale  = 1                    double delta = 0                    int borderType = BORDER_DEFAULT)

 (to be continued。。。。。。)

(三)常用卷积核

以下为原图片:

<1>什么都不处理(3*3)

很容易理解,就是0*8+中间原像素值

<2>图像锐化滤波器Sharpness Filter(3*3)(梯度锐化和拉普拉斯锐化)

 注意一下,中间值为8就是边缘检测,为9就是原图的图像锐化

 另外,如果卷积核更大,则锐化的程度也会更细致。

具体分析见:

Matlab图像处理—锐化滤波器__三三_的博客-CSDN博客_锐化滤波

<3>边缘检测Edge Detection

相当于求导的离散版本:你将当前的像素值减去前一个像素值,这样你就可以得到这个函数在这两个位置的差别或者斜率。

 上面的是垂直边缘检测,以此类推,可以实现水平和斜向45度的边缘检测。

<4>Canny边缘检测Edge Detection

<5>浮雕Embossing Filter

浮雕滤波器可以给图像一种3D阴影的效果。只要将中心一边的像素减去另一边的像素就可以了。这时候,像素值有可能是负数,我们将负数当成阴影,将正数当成光,然后我们对结果图像加上128的偏移。这时候,图像大部分就变成灰色了。(转载)

这里我将灰度值调高了100

<6>均值模糊Box Filter (Averaging)

 注意这里的1应该是十三分之一,这里没有处理,只是将最后输出的图片的灰度值更改了。

均值就得求平均。

你想要更模糊的效果,加大滤波器的大小即可。或者对图像应用多次模糊也可以。

<7>高斯模糊

  均值模糊很简单,但不是很平滑。高斯模糊就有这个优点,所以被广泛用在图像降噪上。特别是在边缘检测之前,都会用来移除细节。高斯滤波器是一个低通滤波器。(转载)

低通滤波可以简单的认为:设定一个频率点,当信号频率高于这个频率时不能通过,在数字信号中,这个频率点也就是截至频率,当频域高于这个截止频率时,则全部赋值为0。因为在这一处理过程中,让低频信号全部通过,所以称为低通滤波。

低通过滤的概念存在于各种不同的领域,诸如电子电路,数据平滑,声学阻挡,图像模糊等领域经常会用到。

在数字图像处理领域,从频域看,低通滤波可以对图像进行平滑去噪处理。

//_src _IN_ 输入的源影像
//_dst _OUT_ 输出的目标影像
//kSize 核大小 如果大小为负数的话,那么根据输入的sigma进行计算
//ksize 大小可以为1,3,5,7,最大值为7
//计算的公式为 sigma = 0.3\*((ksize - 1)\*0.5 - 1) + 0.8
//sigmal1 X方向上的sigma值
//sigmal2 Y方向上的sigma值
//如果sigmal值为负数的话,那么使用默认的滤波过滤器
void cv::GaussianBlur( InputArray _src, OutputArray _dst, Size ksize,double sigma1, double sigma2,int borderType )

<8>运动模糊Motion Blur

(to be continued.......)

(还有很多要补充的)


http://chatgpt.dhexx.cn/article/Oc67oq9h.shtml

相关文章

机器学习4:卷积运算简介

机器学习4&#xff1a;卷积运算简介【旧笔记整理】 &#xff08;1&#xff09;卷积运算简介&#xff1a; 卷积即在卷积核滑动过程中&#xff0c;矩阵与卷积核对应位置的数据相乘最后乘积求和的计算过程。 &#xff08;2&#xff09;卷积运算的特性&#xff1a; ①稀疏连接&…

【OpenCV 例程200篇】52. 图像的相关与卷积运算

【OpenCV 例程200篇】52. 图像的相关与卷积运算 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 滤波通常是指对图像中特定频率的分量进行过滤或抑制。图像滤波是在尽可能保留图像细节特征的条件…

Python遥感图像处理应用篇(五):python如何使用numpy对遥感图像做卷积运算

本篇接着上一篇(Python遥感图像处理应用篇(四):python如何使用numpy读取遥感图像光谱值)继续深入,对遥感图像做卷积运算处理 1.基本思路 1.1 设置卷积核 这里就用3*3大小的卷积核吧,可以根据需求任意设置卷积核数据达到图像均衡化、锐化、边缘增强等不同效果。 1.2 中心…

求助:MATLAB中实现卷积运算和理论分析中的卷积运算有什么区别?

MATLAB中实现卷积运算和理论分析中的卷积运算有什么区别。 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 …

通过具体的例子说明一维和二维的相关运算、卷积运算究竟是怎么做的。

在图像处理中&#xff0c;大量的算法中用到的运算其实都是相关运算和卷积运算。 所以&#xff0c;我们很有必要知道相关运算、卷积运算究竟是怎么做的。 本篇博文通过具体而简单的例子向大家说明相关运算、卷积运算究竟是怎么做的。 01-一维相关运算 下图显示了一维序列n与窗口…

卷积运算与互相关运算

在卷积神经网络中&#xff0c;虽然卷积层得名于卷积(convolution)运算&#xff0c;但我们通常在卷积层中使用更加直观的互相关运算(cross-correlation)运算。 卷积运算与互相关运算的联系 卷积运算与互相关运算类似。为了得到卷积运算的输出&#xff0c;只需将核数组左右翻转…

卷积运算(CNN卷积神经网络)

文章目录 图像卷积互相关运算卷积层图像中目标的边缘检测学习卷积核小结 图像卷积 最近学习到了卷积深度网络&#xff0c;有些本质概念太深暂时还没有理解透彻&#xff0c;现在主要记录下卷积神经网络中的一些计算。 以下介绍与计算均出自李沐老师的《动手学深度学习》&#…

java 怎么做卷积运算,入门教程之算法系列(二):卷积运算与模糊操作

卷积在信号处理领域有极其广泛的应用,也有严格的物理和数学定义。 OpenCV中对图像进行模糊操作,其背后的原理就是卷积运算,可是究竟卷积运算是什么,模糊的卷积算法又是如何实现的呢?本文将进行讨论。考虑到大部分读者的非专业性,本人将尽量不使用专业术语,而使用通俗易懂…

python实现卷积运算

一、卷积定义与朴素计算方法&#xff1a; 图1 卷积定义与计算方法 二、 Python代码实现 结合伪代码实现python代码如下&#xff08;因为我是先写的代码&#xff0c;后才发现上面的伪代码&#xff0c;所以循环次序略有不同&#xff09;&#xff1a; import torch.nn as nn im…

卷积运算

卷积层 卷积的本质是用卷积核的参数来提取数据的特征&#xff0c;通过矩阵点乘运算与求和运算来得到结果。 下面给出一个基本的二维卷积的运算过程&#xff0c;即 y ω x b y \omega x b yωxb 特征图 ( x x x) 的大小为 1 x 5 x 5, 输入的通道数为 1.卷积核 ( ω \omeg…

深入浅出理解卷积运算

提起卷积运算相信大家都不陌生&#xff0c;这是一种很常见的运算。我们在学习《信号与系统》时就一直在和卷积打交道&#xff0c;在后来的一些课程中也有卷积运算的身影&#xff0c;比如《自动控制原理现代部分》中的卷积定理等。 在学习《信号与系统》时我们知道了卷积的定义&…

卷积计算——1. 关于卷积的基本概念

文章目录 卷积的基本概念卷积运算公式交换律分配律结合律数乘结合律 卷积核代码的基本框架 卷积的基本概念 卷积&#xff0c;是一个强有力的数学工具&#xff0c;在计算机领域中有很多非常不错的运用&#xff0c;能产生很多意想不到的效果和输出。 数学上&#xff0c;其连续函…

数(3)相关运算和卷积运算

目录 相关运算 卷积运算 连续信号 离散信号 卷积性质 卷积定理 &#xff08;参考其他多篇博客&#xff0c;学习自用&#xff0c;侵删&#xff09; 相关运算 相关运算是两个序列的相似性比较的一种数学运算。 公式里面的序列&#xff0c;可能是实数&#xff0c;可能是复数…

各种卷积方式的最全讲解

文章目录 一&#xff1a;卷积的定义二&#xff1a;标准卷积1.1D卷积Ⅰ&#xff1a;一维Full卷积Ⅱ&#xff1a;一维Same卷积Ⅲ&#xff1a;一维Valid卷积Ⅳ&#xff1a;三种一维卷积的相互关系 2.2D卷积3.3D卷积 三&#xff1a;转置卷积四&#xff1a;Separable卷积五&#xff…

深度学习(一):卷积运算

一、卷积核与池化&#xff1a; 1.1 卷积核&#xff08;Convolutional&#xff09;&#xff1a; 将输入图像中一个小区域中像素加权平均后成为输出图像中的每个对应像素&#xff0c;其中权值由一个函数定义&#xff0c;这个函数称为卷积核(滤波器)。 一般可以看作对某个局部的…

深度学习-图解卷积运算

卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;针对全连接网络 的局限做出了修正&#xff0c;加入了卷积层&#xff08;Convolution层&#xff09;和池化层&#xff08;Pooling 知 层&#xff09;。 CNN被广泛应用于图像识别、语音识别等各…

【svg文字路径动画,让文字沿着路径动起来】

最近项目里面用到了这个文字路径动画&#xff0c;不得不说确实挺好玩的&#xff0c;如果有需要的小伙伴可以参考&#xff01; 代码片段 由于公司之前项目里也用到过&#xff0c;但是我是第一次写&#xff0c;所以第一时间还是先看看前辈是怎么处理的&#xff0c;借鉴一下长长…

Qml路径动画-PathAnimation

Qml中的PathAnimation可以让目标沿着一个指定路径运行。 PathAnimation的属性 anchorPoint&#xff1a;使用"x,y"来指定运动的锚定点。orientation&#xff1a;指定控制目标对象沿着路径运动的旋转策略。path属性的类型为Path&#xff0c;选择你要构造的路径。 sta…

dotween路径移动_Unity---DOTween插件学习(3)---获取数据、协程、路径动画

[Toc] 本文及系列参考于Andy老师的DOTween系列 欢迎大家关注**Andy老师** 10、获取数据 类方法 返回所有暂停的动画&#xff0c;没有则返回null var list DOTween.PausedTweens(); 返回所有真正播放的动画&#xff0c;没有则返回null var list DOTween.PlayingTweens(); 获取…

houdini:固定朝向的路径动画

涉及节点&#xff1a;follow path 一、模型准备 路径、朝向的物体&#xff0c;以及运动的物体&#xff0c;一共三个 二、follow path 节点 原来xxxx是一个属性&#xff0c;现在好像必须在创建路径动画的时候就选择xxx了 下面请紧跟我的步骤 steep1&#xff1a;点击follow p…