使用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 ...
随机推荐
- p1154 地平线
题目描述 Farmer John的牛们认为,太阳升起的那一刻是一天中最美好的,在那时她们可以看到远方城市模糊的轮廓.显然,这些轮廓其实是城市里建筑物模糊的影子. 建筑物的影子实在太模糊了,牛们只好把它 ...
- 记一个Java错误 1 -- Unsupported major.minor version 52.0
今天打开ADT eclipse 准备调试上周的安卓项目, 发现总是报错 如图: 百度了一下说是 jdk版本过低的问题 (低版本的jre运行高版本project) 于是就修改了一下 window - ...
- Ionic2中集成腾讯Bugly之自定义插件
Ionic2混合开发,入坑系列:Ionic2中集成腾讯Bugly之自定义插件 1.编写Bugly.js代码 var exec = require('cordova/exec'); module.exp ...
- 【js】基本类型和引用类型的区别
1.保存方式:(一脸懵逼???) 基本类型是按值访问的,可以在变量的生命周期改变它,但是它是储存在哪里的呢?在浏览器缓存吗?[执行环境中定义的所有变量和函数都存储在执行环境的变量对象里,变量对象我们编 ...
- ajax 实现加载页面、删除、查看详细信息,以及bootstrap网页的美化
由于有些的程序员可能不是很会Photoshop,所以为了美化页面,我们可以借助工具bootstrap,实现起来相对就要比之前做的美观一些, 今天我用bootstrap把之前做的显示表格进行了一下美 ...
- linux学习初体验
前天买了鸟哥私房菜,昨天一早就到了.阅读了前两章. 一.Linux是什么 二.Linux如何学习 还有前面的计算机概论也值得一看.对于计算机构成,硬件解读,数据存储,比一般的电脑维修类的书深一些. 第 ...
- C++ 容器对象vector和list 的使用
在<<c++ primer>>第四版Exercise Section 9.3.4 的Exercise 9.20 是这样的一道题目:编写程序判断一个vector<int&g ...
- JavaSE之认识java
本来很早之前就应该总结自己在JavaSE中系统学到的知识了,马上就要出去工作了,想想自己还是非常菜的菜鸟,自己就夜不能寐呀.现在从zero基础开始带大家一起回顾学习的基础知识. 现在已经是凌晨了,但是 ...
- JavaWeb之Ajax
一.什么是Ajax 1.1.Ajax的定义 Ajax:(Asynchronous JavaScript And XML)指异步 JavaScript 及 XML 不是一种新的编程语言,而是一种用于创建 ...
- Opencv2.4.13 与Visual Studio2013 环境搭建配置
opencv这个工具来进行图像处理.大致是使用C++语言编写程序实现识别算法的实现,所以首先就要进行opencv与VS环境的配置. Shaine属于那种半路出家之人都算不上的那种,本科期间三四 ...