一、滤波器实现

我们实现这样一个基于拉普拉斯算子的滤波器核心,并使用它进行滤波,这可以做到锐化图像的效果,

0 -1 0
-1 5 -1
0 -1 0

首先我们完全手动的进行滤波,依赖指针操作,

void sharpen(const cv::Mat &image, cv::Mat &result) {result.create(image.size(), image.type());std::cout << image.size() << std::endl;int col = image.cols;int row = image.rows;int channels = image.channels();for (int i = 1; i < row - 1; i++ ) {// 必须添加const,因为image是const的const uchar* previous_row = image.ptr<uchar>(i - 1);const uchar* current_row = image.ptr<uchar>(i);const uchar* next_row = image.ptr<uchar>(i + 1);uchar* out_line = result.ptr<uchar>(i);for (int j = channels; j < (col - 1)*channels; j++) {// cv::saturate_cast<uchar>将输入截断在0到255*out_line++ = cv::saturate_cast<uchar>(5 * current_row[j] - current_row[j - channels] - current_row[j + channels]- previous_row[j] - next_row[j]);}}result.row(0).setTo(cv::Scalar(0,0,0));result.row(row - 1).setTo(cv::Scalar(0, 0, 0));result.col(0).setTo(cv::Scalar(0, 0, 0));result.col(col - 1).setTo(cv::Scalar(0,0,0));
}

OpenCV提供了cv::filter2D函数,当我们指定滤波核(一个Mat格式数据)可以自动代我们完成循环过程,依赖API实现本函数如下:

void sharpen2D(const cv::Mat image, cv::Mat &result) {cv::Mat kernel(3, 3, CV_32F, cv::Scalar(0));kernel.at<float>(1, 1) = 5;kernel.at<float>(0, 1) = -1;kernel.at<float>(1, 0) = -1;kernel.at<float>(2, 1) = -1;kernel.at<float>(1, 2) = -1;cv::filter2D(image, result, image.depth(), kernel);
}

对两个版本函数都进行调用,

  cv::Mat image = cv::imread("test.jpg");std::cout << (int)image.data << std::endl;// 自行锐化滤波cv::Mat image1;sharpen(image, image1);show(image1, "锐化");cv::Mat image2;sharpen2D(image, image2);show(image2, "API锐化");

查看输出(可右键查看大图),

原图如下:

二、高斯滤波

OpenCV将大部分常用滤波函数进行封装,资料很多,自行查阅。其中高斯核函数多提一句,它是可拆分核函数,一个二维核可以拆解为两个一维核,我们既可以这样调用:

cv::GaussianBlur(image,result,cv::Size(5, 5),  // 窗口大小1.5  // sigma
);

也可以这样调用,

cv::Mat gauss = cv::getGaussianKernel(5, 1.5, CV_32F);
cv::sepFilter2D(image, result, -1, gauss, gauss);  // -1代表输入图深度
cv::imshow("双一维高斯滤波", result);

结果一样,

『OpenCV3』滤波器实现及使用滤波器降噪相关推荐

  1. 『转载』Debussy快速上手(Verdi相似)

    『转载』Debussy快速上手(Verdi相似) Debussy 是NOVAS Software, Inc(思源科技)发展的HDL Debug & Analysis tool,这套软体主要不是 ...

  2. 『参考』.net CF组件编程(4)——为自定义组件添加工具箱图标!

    前言: 在前三篇的文章中,和大家一起创建了一个用于TCP连接检测的小组件,如果你记不得了,可以通过以下链接去回顾一下: 『参考』.net CF组件编程(1)--基础之后 『参考』.net CF组件编程 ...

  3. 『TensorFlow』命令行参数解析

    argparse很强大,但是我们未必需要使用这么繁杂的东西,TensorFlow自己封装了一个简化版本的解析方式,实际上是对argparse的封装 脚本化调用tensorflow的标准范式: impo ...

  4. 能使曲线变平滑的一维滤波器_音响电源滤波器有什么作用?有人说能提升音质!你信不信?...

    我们日常使用音响听音乐,讨论了很多关于喇叭.箱体.音源等影响音质的话题.今天我们来谈谈音响电源滤波器,可能有些人还很陌生,它到底有什么作用?其实,音响电源滤波器在音响系统里面发挥着非常重要的角色. 现 ...

  5. 『Numpy』常用方法记录

    numpy教程 防止输出省略号 import numpy as np np.set_printoptions(threshold=np.inf) 广播机制 numpy计算函数返回默认是一维行向量: i ...

  6. 如何利用CIC滤波器、CIC补偿滤波器和半带滤波器设计一个高频数字抽取滤波器

    设计了采样频率为640 MHz.过采样率为64的高频数字抽取滤波器.该数字抽取滤波器由CIC(Cascaded Integrator Comb)滤波器(降16倍).CIC补偿滤波器(降2倍)和半带滤波 ...

  7. 2018年『web』开发者不得不知的技术趋势

    作为一个『web』开发者,无论是做前端还是后端,都应该时刻保持着对技术的敏感性.技术的流行需要一定时间的沉淀,有哪些web相关的技术会可能会在2018年成为web开发的新宠呢?下面列举业界经过实践并且 ...

  8. 『TensorFlow』函数查询列表_张量属性调整

    博客园 首页 新随笔 新文章 联系 订阅 管理 『TensorFlow』函数查询列表_张量属性调整 数据类型转换Casting 操作 描述 tf.string_to_number (string_te ...

  9. 『TensorFlow』专题汇总

    TensorFlow函数查询 『TensorFlow』0.x_&_1.x版本框架改动汇总 『TensorFlow』函数查询列表_数值计算 『TensorFlow』函数查询列表_张量属性调整 『 ...

最新文章

  1. [Java] Web开发环境搭建 - MyEclipse 篇
  2. Servlet与JSP学习笔记(五) JSP核心(下)
  3. 【自由随想录(一)】
  4. ASP.NET MVC视图引擎SPARK文档中文版
  5. 如何系统地理解「交易平台」?
  6. 33个优秀的 jQuery 图片展示插件分享
  7. 浅析php反序列化字符串逃逸
  8. 利用数据集在水晶报表中显示图像
  9. Python高级语法-正则表达式
  10. 【二分查找万能模板,告别死循环、告别越界】Leecode 34. 在排序数组中查找元素的第一个和最后一个位置
  11. 条令考试小程序辅助器_计算机一级考试干货!
  12. 学生PHP校园超市网站制作 学生PHP网页毕设源码 学生动态数据库网站作品 PHP电子商务商城购物网站
  13. 1.7 编程基础之字符串 30 字符环 python
  14. 第5课 开心的金明《聪明人的游戏:信息学探秘.提高篇》
  15. C++之char , signed char , unsigned char
  16. centeros 下载及安装
  17. 解决google浏览器自动填充密码问题
  18. 关于《0bug》一书随机数的一处修订
  19. 十二、偏向锁、轻量级锁、重量级锁,锁的膨胀过程
  20. python末尾加空格_Python3基础 print(,end=) 输出内容的末尾加入空格

热门文章

  1. Tensorflow之flags的用法介绍
  2. 关于优酷开放SDK之setOnLoadingStatusListener
  3. 5G NR中物理层信号传输过程
  4. java BIO NIO AIO 理论篇
  5. the server did not provide any additional information
  6. Spring事务源码分析
  7. poj 1077 Eight(A*)
  8. [Innost]Android深入浅出之Binder机制
  9. 悲催的CamShift
  10. iToken----开发前准备