opencv简单滤波
来源:互联网 发布:由诲女知之乎翻译 编辑:程序博客网 时间:2024/06/07 15:31
归一化块滤波器:
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: 像素的邻域直径
- : 颜色空间的标准方差
- : 坐标空间的标准方差(像素单位)
#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;}
0 0
- opencv简单滤波
- opencv简单学习方框滤波,均值滤波,高斯滤波
- OpenCV简单操作-图像均值滤波
- OPENCV 滤波
- opencv滤波
- opencv 滤波
- OpenCV | 滤波
- opencv滤波
- opencv 滤波
- OpenCV对图像做简单处理——平滑滤波
- OpenCV入门:简单图像处理实例——平滑滤波
- opencv中值滤波-双边滤波
- opencv-图像滤波
- OpenCV中值滤波
- opencv学习-imgprocess-滤波
- OpenCV: 高斯滤波
- opencv Gabor滤波函数
- Opencv中图像滤波
- php将汉字转换拼音
- 【模式识别】OpenCV中使用神经网络 CvANN_MLP
- python中的getopt模块
- CXF整合Spring之JaxWsProxyFactoryBean调用
- Android开发之远距离PC控制
- opencv简单滤波
- MFC实现的串口测试程序
- iOS 判断当前屏幕旋转状态
- 学习JAVA开发心得第一篇
- BZOJ 2440 & 2301 莫比乌斯应用
- 关于iOS多线程
- POJ - 2348 Euclid's Game
- dbms_sql包的用法
- 为何stop()和suspend()方法不推荐使用