使用opencv实现自定义卷积
对图像进行卷积是图像处理的基本操作,最近在研究图像滤波,经常要用到自定义卷积,所以实现了一下
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp" using namespace cv; Mat get_blur_kernel(int kernel_size);//获得归一化滤波的卷积核 int main(int argc, char ** argv)
{
Mat src, dst;
Point anchor;
double delta;
int ddepth;
int kernel_size = ;
// 生成一个掩模核 大小为kernel_size*kernel_size,这里我们用归一化块滤波的卷积核做示例
Mat kernel = get_blur_kernel(kernel_size);
// 载入一张图片
src = imread("a.jpg");
if (!src.data)
return -; // 创建窗口
imshow("before",src);
waitKey();
// 初始化滤波器参数
anchor = Point(-, -);
delta = ;
ddepth = -;
//将核设置好之后,使用函数 filter2D 就可以生成滤波器:
filter2D(src, dst, ddepth, kernel, anchor, delta, BORDER_DEFAULT); imshow("after", dst);
waitKey();
return ;
} //生成归一化滤波的卷积核,通过对kernel.ptr(i)[j]的操作来进行
Mat get_blur_kernel(int kernel_size)
{
Mat kernel = (Mat_<float>(kernel_size, kernel_size));
for (int i = ; i < kernel_size; i++)
{
for (int j = ; j < kernel_size; j++)
kernel.ptr<float>(i)[j] = 1.0 / (kernel_size*kernel_size);
}
return kernel;
}
卷积核kernel其实也是一个Mat对象,我们可以通过kernel.ptr(i)[j]实现对矩阵元素的直接操作,
将核设置好之后,使用opencv提供的函数 filter2D 就可以生成滤波器:
filter2D(src, dst, ddepth, kernel, anchor, delta, BORDER_DEFAULT);
其中各参数含义如下:
src : 源图像
dst : 目标图像
ddepth : dst 的深度。若为负值(如 - 1 ),则表示其深度与源图像相等。
kernel : 用来遍历图像的核
anchor : 核的锚点的相对位置,其中心点默认为(-1, -1) 。
delta : 在卷积过程中,该值会加到每个像素上。默认情况下,这个值为 0 。
BORDER_DEFAULT : 这里我们保持其默认值,更多细节将在其他教程中详解
只需改变卷积核,我们就可以使用类似的方法创造自定义滤波了。
作者: Elliott Zheng
出处: http://www.cnblogs.com/elliottzheng/p/6616869.htmlp/6664218.html>
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(elliott.zheng@foxmail.com)咨询.
使用opencv实现自定义卷积的更多相关文章
- OpenCV 之 自定义滤波
图像处理中,"空间域" 指的是图像平面,因此,空间滤波 可定义为:在图像平面内对像素灰度值进行的滤波 1 空间滤波 1.1 滤波过程 如图,Filter 是一个 3x3 滤波核 ...
- opencv:自定义滤波
卷积核的定义 均值卷积核 // 自定义滤波 - 均值卷积 int k = 15; Mat mkernel = Mat::ones(k, k, CV_32F) / (float)(k * k); Mat ...
- opencv:图像卷积
卷积基本概念 C++代码实现卷积 #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; u ...
- <学习opencv>过滤器和卷积
/*=========================================================================*/ // 过滤器和卷积 /*========== ...
- opencv构建高斯卷积核
关于高斯核函数可以参见阮一峰老师的日志:高斯模糊的算法 如何使用高斯核进行高斯模糊可以参见我的另一篇日志:opencv构建自定义卷积 Mat Gaussian_kernal(int kernel_si ...
- opencv::自定义线性滤波
卷积概念 常见算子 自定义卷积模糊 卷积概念 1.卷积是图像处理中一个操作,是kernel在图像的每个像素上的操作. 2.Kernel本质上一个固定大小的矩阵数组,其中心点称为锚点(anchor po ...
- 使用opencv设置图像的格式以及帧率
最近楼主正在写一个关于图像存储的程序,LZ有一颗求知心,想要了解保存的图像的格式以及获取摄像头帧率.晚些时候会写一篇关于opencv获取摄像头并且保存每帧图像信息方法. 1.修改图像的像素显示: 首先 ...
- OpenCV 例子代码的讲解、简介及库的安装 .
转载请标明是引用于 http://blog.csdn.net/chenyujing1234 欢迎大家提出意见,一起讨论! 一.OpenCV介绍: OpenCV是由Intel性能基元(IPP)团队主持, ...
- tensorflow卷积神经网络与手写字识别
1.知识点 """ 基础知识: 1.神经网络(neural networks)的基本组成包括输入层.隐藏层.输出层.而卷积神经网络的特点在于隐藏层分为卷积层和池化层(po ...
随机推荐
- HttpHelper万能框架V1.6
下载地址:http://yun.baidu.com/share/link?uk=1745303310&shareid=1343567367 引入:System.Web和System.Web.E ...
- 用OC和Swift一起说说二叉树
前言: 一:在计算机科学中,二叉树是每个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(right subt ...
- 【webpack】-- 模块热替换
全称是Hot Module ReplaceMent(HMR),理解成热模块替换或者模块热替换都可以吧,和.net中的热插拔一个意思,就是在运行中对程序的模块进行更新.这个功能主要是用于开发过程中,对生 ...
- Struts2之Result详解
上一篇我们把Struts2中的Action接收参数的内容为大家介绍了,本篇我们就一起来简单学习一下Action的4种Result type类型,分为:dispatcher(服务端页面跳转):redir ...
- github 删除远程仓库项目中的任意文件夹
今天上传代码把不需要的push上去了.结果想删除那个不想要的怎么弄都不行.网上大部分都是把那个项目整个暴力删除.那可不行啊那么多都删除.下次上传不是要命啊! 试啊试终于解决了.顺便记录一下也帮助下需要 ...
- Asp.net MVC 视图使用像Ajax,ViewBag提示为找到上下文
不知是什么原因,所有的视图中Ajax,ViewBag之类的都提示为找到上下文(由于换了个版本Vs,猜测应该是Vs的原因),然后顺利在网上找到了解决方案. 给地址链接:https://social.ms ...
- PHP-day01
<!--php嵌入HTML--><html><head> <title>day01</title></head><body ...
- arcgisserver成功发布服务后,浏览服务,无地图显示
软件:ArcMap10.2,ArcgisCatalog10.2 方法:ArcMap10.2添加数据库连接,成功登陆数据库后,拖拽目标图层至Map窗口,对各个图层进行符号化设置 ArcCatalog中找 ...
- SQL中PIVOT和UNPIVOT行列转换
DECLARE @sql_col VARCHAR(8000); DECLARE @sql_str VARCHAR(8000); DECLARE @sql_ VARCHAR(MAX); SELECT @ ...
- 【Android】TextView跑马灯效果
老规矩,先上图看效果. 说明 TextView的跑马灯效果也就是指当你只想让TextView单行显示,可是文本内容却又超过一行时,自动从左往右慢慢滑动显示的效果就叫跑马灯效果. 其实,TextView ...