一、滤波器实现

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

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. 『OpenCV3』滤波器边缘检测

    一.原理简介 边缘检测原理 - Sobel, Laplace, Canny算子 X方向Sobel算子 -1 -2 -1 0 0 0 1 2 1 Y方向Sobel算子 -1 0 1 -2 0 2 -1 ...

  2. 『OpenCV3』Harris角点特征_API调用及python手动实现

    一.OpenCV接口调用示意 介绍了OpenCV3中提取图像角点特征的函数: # coding=utf- import cv2 import numpy as np '''Harris算法角点特征提取 ...

  3. 『OpenCV3』霍夫变换原理及实现

    霍夫变换常用于检测直线特征,经扩展后的霍夫变换也可以检测其他简单的图像结构. 在霍夫变换中我们常用公式 ρ = x*cosθ + y*sinθ 表示直线,其中ρ是圆的半径(也可以理解为原点到直线的距离 ...

  4. 『OpenCV3』基于色彩分割图片

    一.遍历图像实现色彩掩码 本节我们实现这样一个算法,我们指定某种颜色和一个阈值,根据输入图片生成一张掩码,标记符合的像素(和指定颜色的差异在阈值容忍内). 源代码如下,我们使用一个class完成这个目 ...

  5. 『OpenCV3』Mat简介

    Mat属性方法介绍:OpenCV2:Mat属性type,depth,step 推荐一套OpenCV入门博客:OpenCV探索 一.Mat Mat类用于表示一个多维的单通道或者多通道的稠密数组.能够用来 ...

  6. 『OpenCV3』处理视频&摄像头

    在opencv中,摄像头和视频文件并没有很大不同,都是一个可以read的数据源,使用cv2.VideoCapture(path).read()可以获取(flag,当前帧),对于每一帧,使用图片处理函数 ...

  7. 『OpenCV3』简单图片处理

    cv2和numpy深度契合,其图片读入后就是numpy.array,只不过dtype比较不常用而已,支持全部数组方法 数组既图片 import numpy as np import cv2 img = ...

  8. 『AngularJS』$location 服务

    项目中关于 $location的用法 简介 $location服务解析在浏览器地址栏中的URL(基于window.location)并且让URL在你的应用中可用.改变在地址栏中的URL会作用到$loc ...

  9. [原创] 【2014.12.02更新网盘链接】基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装

    [原创] [2014.12.02更新网盘链接]基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装 joinlidong 发表于 2014-11-29 14:25:50 ...

随机推荐

  1. pycharm的简介

    pycharm使用 集成开发环境(IDE,Integrated Development Environment ) VIM #经典的linux下的文本编辑器 Emacs #linux 文本编辑器, 比 ...

  2. 《More Accurate Question Answering on Freebase》文献笔记

    bast-2015-CIKM CIKM全称是International Conference on Information and Knowledge Management 这篇文章主要采用采用lea ...

  3. Hbase 系统架构(zhuan)

    一.系统架构 客户端连接hbase依赖于zookeeper,hbase存储依赖于hadoop client: 1.包含访问 hbase 的接口, client 维护着一些 cache(缓存) 来加快对 ...

  4. Vue系列之 => webpack基础使用

    webpack安装方式 1,运行 npm i webpack -g 全局安装. 2,在项目根目录中运行 npm i webpack --save-dev 安装到项目依赖中 项目目录 进入src运行, ...

  5. noip单词接龙

    看了许多题解都好长啊,自不量力的来贴一下代码 (震惊于这都能ac...) 这道题的思路是先从字符串中找有重部分然后直接比较剩下的部分,比较的数据也可以用来计算数值 其实满水的题 总之看注释啦(竟然能耐 ...

  6. vue用mand-mobile ui做交易所移动版实战示例

    vue用mand-mobile ui做交易所移动版实战示例 先展示几个界面: 目录结构: main.js // The Vue build version to load with the `impo ...

  7. DB2 错误代码

    sqlcode sqlstate 说明 000 00000 SQL语句成功完成 01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +098 0 ...

  8. 解决tomcat重启时报严重: Exception loading sessions from persistent storage的问题

    很多项目在重启时会报:严重: Exception loading sessions from persistent storage的问题.该问题的原因是tomcat的session持久化机制引起的,t ...

  9. Oracle数据库管理----性能优化

    https://blog.csdn.net/yzllz001/article/details/54848513 数据库访问优化法则   要正确的优化SQL,我们需要快速定位能性的瓶颈点,也就是说快速找 ...

  10. Jmeter对SQL Server进行压力测试

    下载地址 https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/ 选择binary版本即可 下载的是apache-jmeter-5. ...