网站首页 > 技术文章 正文
平滑滤波是一种简单又常见的图像处理操作。平滑图像的目的有很多,但通常都是为了减少噪声和伪影。
在OpenCV中共有5种平滑滤波操作,分别是以下几种:
测试代码如下:
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat srcImage = cv::imread("F:/图像处理/图片一/outThee2.jpg", 0);
if (srcImage.empty())
{
printf("图片读取失败!\n");
return -1;
}
Mat outputImage;
//简单模糊滤波器
//blur(srcImage, outputImage, Size(3, 3));
//方框型滤波器
//boxFilter(srcImage, outputImage, -1, Size(3, 3));
//中值滤波器
medianBlur(srcImage, outputImage, 3);
//高斯滤波器
//GaussianBlur(srcImage, outputImage, Size(3, 3), 0.0, 0.0);
//双边滤波器
//bilateralFilter(srcImage, outputImage, 9, 10.0, 50.0);
imshow("原图", srcImage);
imshow("滤波处理后的图像", outputImage);
waitKey(0);
return 0;
}
输入的源图像
(1) 简单模糊滤波器
void cv::blur(
cv::InputArray src, //输入图像
cv::OutputArray dst, //滤波后得到的图像
cv::Size ksize, //窗口(核)的尺寸大小
cv::Point anchor = cv::Point(-1, -1), //核与源图像的对齐方式。默认值为Point(-1,-1),表示核相等滤波器居中
int borderType = cv::BORDER_DEFAULT //边界类型
);
//5种边界类型
cv::BORDER_CONSTANT //复制指定的常量扩展边界
cv::BORDER_WRAP //复制对边的像素扩展边界
cv::BORDER_REPLICATE //复制边缘的像素扩展边界
cv::BORDER_REFLECT //通过镜像复制扩展边界
cv::BORDER_REFLECT_101 //通过镜像复制扩展边界,边界像素除外
cv::BORDER_DEFAULT //cv::BORDER_REFLECT_101的别名
滤波结果:
从结果来看,简单模糊滤波对于点状噪声的处理有一定效果,但不理想。
(2) 方框型滤波器
void cv::boxFilter(
cv::InputArray src, //输入图像
cv::OutputArray dst, //滤波得到的图像
int ddepth, //输出图像的深度,取-1表示与源图像一致
cv::Size ksize, //核的大小
cv::Point anchor = cv::Point(-1, -1), //核与源图像的对齐方式
bool normalize = true,
int borderType = cv::BORDER_DEFAULT //边界类型
);
滤波结果:
简单模糊是方框型滤波器的一种特殊形式,从测试结果来看,它们两个的滤波效果基本是一样的。
(3) 中值滤波器
void cv::medianBlur(
cv::InputArray src, //输入图像
cv::OutputArray dst, //滤波后得到的图像
int ksize //核大小
);
滤波结果:
由于中值滤波是将每个像素替换为围绕这个像素的矩形领域内的中值像素,因此对图像中较大的异常孤立值非常敏感,所以中值滤波对于这种点状噪声的处理效果是最好的。
(4) 高斯滤波器
void cv::GaussianBlur(
cv::InputArray src, //输入图像
cv::OutputArray dst, //滤波后得到的图像
cv::Size ksize, //核尺寸的大小
double sigmaX,
double sigmaY,
int borderType = cv::BORDER_DEFAULT
);
滤波结果:
高斯滤波虽然非常常用,但是对于这种点状噪声的处理,还是不太适用的。
(5) 双边滤波器
void cv::bilateralFilter(
cv::InputArray src, //输入图像
cv::OutputArray dst, //滤波后得到的图像
int d,
double sigmaColor,
double sigmaSpace,
int borderType = cv::BORDER_DEFAULT
);
滤波结果:
猜你喜欢
- 2024-12-26 图像采集卡 – 接口介绍 图像采集卡插槽
- 2024-12-26 深度学习中的图像分割:方法和应用
- 2024-12-26 基于深度学习的图像识别算法研究 基于机器学习的图像识别研究
- 2024-12-26 什么是卷积? 什么是卷积运算
- 2024-12-26 图像配准及其应用 图像配准流程的三要素
- 2024-12-26 作业帮公开图像处理相关专利,通过人工智能模型消除图像模糊
- 2024-12-26 图像处理中的高斯(核)函数简介 高斯函数在图像处理中的应用
- 2024-12-26 图像进行预处理和优化方法都有哪些
- 2024-12-26 几种典型的图像去噪算法总结 图像去噪模型
- 2024-12-26 Java,OpenCV,图像模糊,归一化均值滤波,中值滤波器,高斯模糊
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)