opencv简单滤波
2015-07-31 18:53
483 查看
归一化块滤波器:
OpenCV函数 blur 执行了归一化块平滑操作。
我们输入4个实参 (详细的解释请参考 Reference):
src: 输入图像
dst: 输出图像
Size( w,h ): 定义内核大小( w 像素宽度, h 像素高度)
Point(-1, -1): 指定锚点位置(被平滑点), 如果是负值,取核的中心为锚点。
高斯滤波器:
OpenCV函数 GaussianBlur 执行高斯平滑 :
我们输入4个实参 (详细的解释请参考 Reference):
src: 输入图像
dst: 输出图像
Size(w, h): 定义内核的大小(需要考虑的邻域范围)。
和
必须是正奇数,否则将使用
和
参数来计算内核大小。
: x
方向标准方差, 如果是
则
使用内核大小计算得到。
: y
方向标准方差, 如果是
则
使用内核大小计算得到。.
中值滤波器:
OpenCV函数 medianBlur 执行中值滤波操作:
我们用了3个参数:
src: 输入图像
dst: 输出图像, 必须与 src 相同类型
i: 内核大小 (只需一个值,因为我们使用正方形窗口),必须为奇数。
双边滤波器
OpenCV函数 bilateralFilter 执行双边滤波操作:
我们使用了5个参数:
src: 输入图像
dst: 输出图像
d: 像素的邻域直径
: 颜色空间的标准方差
: 坐标空间的标准方差(像素单位)
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; }
相关文章推荐
- 解决linux环境mysql中文乱码问题
- docker是个好东西啊
- 手动编译安装LAMP架构,并且实现nagios图形化监控(九)
- linux查看CPU性能及工作状态的指令mpstat,vmstat,iostat,sar,top
- Linux修改系统以及pip更新源
- Linux vmstat命令实战详解
- Docker的安装
- linux认证
- 鸟哥私房菜学习笔记六 Bash
- sqoop从关系库导出数据到hive
- shell调试选项
- 使用Subversion实现网站自动更新 推荐
- OC学习@property和@synthesize的使用
- Z-WIFI+openWRT
- 使用 ftrace 调试 Linux 内核,第 3 部分
- 使用 ftrace 调试 Linux 内核,第 2 部分
- 树莓派-WebCamera图像采集(OpenCV)
- 使用 ftrace 调试 Linux 内核,第 1 部分
- 一个centos下的配置问题
- 大型分布式网站架构设计与实践