opencv简单滤波
归一化块滤波器:
OpenCV函数 blur 执行了归一化块平滑操作。
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ blur( src, dst, Size( i, i ), Point(-1,-1) );if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
我们输入4个实参 (详细的解释请参考 Reference):
- src: 输入图像
- dst: 输出图像
- Size( w,h ): 定义内核大小( w 像素宽度, h 像素高度)
- Point(-1, -1): 指定锚点位置(被平滑点), 如果是负值,取核的中心为锚点。
高斯滤波器:
OpenCV函数 GaussianBlur 执行高斯平滑 :
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ GaussianBlur( src, dst, Size( i, i ), 0, 0 );if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
我们输入4个实参 (详细的解释请参考 Reference):
- src: 输入图像
- dst: 输出图像
- Size(w, h): 定义内核的大小(需要考虑的邻域范围)。 和 必须是正奇数,否则将使用 和 参数来计算内核大小。
- : x 方向标准方差, 如果是 则 使用内核大小计算得到。
- : y 方向标准方差, 如果是 则 使用内核大小计算得到。.
中值滤波器:
OpenCV函数 medianBlur 执行中值滤波操作:
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ medianBlur ( src, dst, i );if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
我们用了3个参数:
- src: 输入图像
- dst: 输出图像, 必须与 src 相同类型
- i: 内核大小 (只需一个值,因为我们使用正方形窗口),必须为奇数。
双边滤波器
OpenCV函数 bilateralFilter 执行双边滤波操作:
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ bilateralFilter ( src, dst, i, i*2, i/2 );if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
我们使用了5个参数:
- src: 输入图像
- dst: 输出图像
- d: 像素的邻域直径
- : 颜色空间的标准方差
- : 坐标空间的标准方差(像素单位)
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"using namespace std;
using namespace cv;/// 全局变量
int DELAY_CAPTION = 1500;
int DELAY_BLUR = 100;
int MAX_KERNEL_LENGTH = 31;Mat src; Mat dst;
char window_name[] = "Filter Demo 1";/// 函数申明
int display_caption(char* caption);
int display_dst(int delay);/**
* main 函数
*/
int main(int argc, char** argv)
{namedWindow(window_name, CV_WINDOW_AUTOSIZE);/// 载入原图像src = imread("C:/lena.jpg", 1);if (display_caption("Original Image") != 0) { return 0; }dst = src.clone();if (display_dst(DELAY_CAPTION) != 0) { return 0; }/// 使用 均值平滑if (display_caption("Homogeneous Blur") != 0) { return 0; }for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2){blur(src, dst, Size(i, i), Point(-1, -1));if (display_dst(DELAY_BLUR) != 0) { return 0; }}/// 使用高斯平滑if (display_caption("Gaussian Blur") != 0) { return 0; }for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2){GaussianBlur(src, dst, Size(i, i), 0, 0);if (display_dst(DELAY_BLUR) != 0) { return 0; }}/// 使用中值平滑if (display_caption("Median Blur") != 0) { return 0; }for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2){medianBlur(src, dst, i);if (display_dst(DELAY_BLUR) != 0) { return 0; }}/// 使用双边平滑if (display_caption("Bilateral Blur") != 0) { return 0; }for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2){bilateralFilter(src, dst, i, i * 2, i / 2);if (display_dst(DELAY_BLUR) != 0) { return 0; }}/// 等待用户输入display_caption("End: Press a key!");waitKey(0);return 0;
}int display_caption(char* caption)
{dst = Mat::zeros(src.size(), src.type());putText(dst, caption,Point(src.cols / 4, src.rows / 2),CV_FONT_HERSHEY_COMPLEX, 1, Scalar(255, 255, 255));imshow(window_name, dst);int c = waitKey(DELAY_CAPTION);if (c >= 0) { return -1; }return 0;
}int display_dst(int delay)
{imshow(window_name, dst);int c = waitKey(delay);if (c >= 0) { return -1; }return 0;
}
opencv简单滤波相关推荐
- OpenCV的滤波与卷积
目录 预备知识 滤波.核和卷积 边界外推和边界处理 阈值化操作 Otsu算法 自适应阈值 平滑 简单模糊和方框型滤波器 中值滤波器 高斯滤波器 双边滤波器 导数和梯度 索贝尔导数 Scharr滤波器 ...
- opencv均值滤波,方盒滤波,cv2.boxFilter,cv2blur
均值滤波 opencv使用均值滤波是通过cv2.blur来实现的,原理十分简单,就是根据周围取平均值 下面对方法进行介绍 def blur(src, ksize, dst=None, anchor=N ...
- OpenCV简单的过滤器平滑的实例(附完整代码)
OpenCV简单的过滤器平滑的实例 OpenCV简单的过滤器平滑的实例 OpenCV简单的过滤器平滑的实例 #include <iostream> #include "openc ...
- OpenCV简单的几何绘图的实例(附完整代码)
OpenCV简单的几何绘图的实例 OpenCV简单的几何绘图的实例 OpenCV简单的几何绘图的实例 #include <opencv2/core.hpp> #include <op ...
- 用opencv简单创建单色图片并保存
用opencv简单创建图片 主要调用一些API来简单实现,包含部分数组知识(一个opencv图像是.array类型的二维或多维数组) // # numpy是python的一种开源数值计算扩展 impo ...
- 图像存储方式及使用OpenCV简单处理图像
一.目的 简述图像存储方式及使用OpenCV简单处理图像. 二.图像存储方式 2.1.YUV 2.1.1.简介 YUV是编译true-color颜色空间(color space)的种类,Y'UV, Y ...
- 各种简单滤波的区别整理
各种简单滤波的区别整理 1. 均值滤波(对高斯噪声具有较好的处理效果) 均值滤波在去噪声的同时会有如下缺点:边界模糊效应明显.细节丢失比较严重:无法去掉噪声,只能微弱的减弱它. 高斯噪声:高斯噪声是指 ...
- Android之OpenCv简单人脸识别功能(Bitmap)
Android之OpenCv简单人脸识别功能 OpenCv的下载 下载地址 - https://opencv.org/releases/ doc 文档目录 samples 示例代码 sdk 编译后的动 ...
- opencv 简单的图像检测,识别,标注,
2022/4/19 刚刚做了个升级版,就是第二种读取文件的方式,另外分函数写了 链接: python opencv 简单图像识别,标注 [升级版]_死非死的博客-CSDN博客 ____________ ...
最新文章
- 遍历map几种方式及应用
- Angular 指令ngTemplateOutlet的运行原理单步调试
- Linux下安全审计工具 lynis 使用说明
- 分布式 知乎 github_如何使用GitHub本机功能来帮助管理中型分布式团队
- 应用上云2小时烧掉近50万,创始人:差点破产,简直噩梦
- Python模块之uuid
- jsf tree组件_JSF UI组件标签属性示例教程
- windows下一些常用的dos命令
- ArcGIS图解建模工具与DEM提取山脊、山谷线(水文分析、表面分析)
- Hybrid APP介绍
- arcgis中python计算面积的表达式_ArcGIS字段计算中的Python语法错误
- memcached入门使用
- 什么是stochastic regressor
- proxmox PVE 安装 黑群晖
- 用django实现一个资产管理的系统
- python画图库哪个好_python画图库
- Cacti使用安装详解
- modbus tcp通讯modbus4j使用说明
- 计算机网就是因特网对吗,计算机因特网的介绍
- 当你收到大厂面试通知后,如下的准备可以大大提升面试成功率