图像处理——滤波器的比较

2023-11-04

滤波器

  • 方框滤波——boxFilter
  • 均值滤波——blur
  • 高斯滤波——GaussianBlur
  • 中值滤波——medianBlur

线性滤波器

线性滤波器经常用于剔除输入信号中不想要的频率或者从许多频率中选择一个想要的频率。常见的有:低通、高通、带通、带阻、全通、陷波
每个信号的输出值是一些输入像素的加权和

  • 方框滤波——boxFilter
  • 均值滤波——blur (归一化后的方框滤波)
  • 高斯滤波——GaussianBlur

非线性滤波器

  • 中值滤波——medianBlur
    在处理类似于椒盐噪声这种散粒噪声时,使用中值滤波有时可以达到更好的效果
    优势: 在均值滤波中,由于噪声成分被放入平均计算中,所以输出受到了噪声的影响。但是在中值滤波器中,由于噪声成分很难选上,所以几乎不会受影响。
    劣势: 中值滤波花费的时间是均值滤波的5倍以上。

代码演示

#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;

int main()
{
	Mat src = imread("G:/picture/cs.jpg");
	if (src.empty())
	{
		cout << "could not load image..." << endl;
	}
	Mat roi;
	//修改图像大小
	resize(src, roi, Size(300, 300));
	//遍历每个像素,用at()函数为随机选取的像素点赋一个随机值
	for (int i = 0; i < roi.rows; i++)
	{
		for (int j = 0; j < roi.cols; j++)
		{
			//当导入的时灰度图
			if (roi.channels() == 1)
			{
				if (rand() % roi.cols == j)
				{
					roi.at<uchar>(i, j) = rand() % 255;  //模上255是为了将随机值限定在(0,255)内
				}	
			}
			//当导入彩色图
			else if (roi.channels() == 3)
			{
				if (rand() % roi.cols == j)
				{
					Vec3b p;
					p[0] = rand() % 255; 
					p[1] = rand() % 255;
					p[2] = rand() % 255;
					roi.at<Vec3b>(i, j) = p;
				}
			}
		}
	}
	Mat median,gaussian,avgblur;
	blur(roi, avgblur, Size(3, 3));//均值
	GaussianBlur(roi, gaussian,Size(3,3),0,0);//高斯
	medianBlur(roi, median, 3);//中值
	imshow("roi",roi);
	imshow("blur", avgblur);
	imshow("Gaussian", gaussian);
	imshow("medianBlur", median);
	waitKey(100000);
	return 0;
}
	

输出结果

  • 椒盐噪声图(roi)
    在这里插入图片描述
  • 均值
    在这里插入图片描述
  • 高斯滤波
    在这里插入图片描述
  • 中值滤波效果图
    在这里插入图片描述
    可以看到,线性滤波器(均值、高斯)处理之后图中仍可以看到“斑点”,而中值滤波则完美的达到“磨皮”效果,由此得出在处理椒盐噪声是应选择中值滤波。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图像处理——滤波器的比较 的相关文章

  • 创建 OpenCV 的 mouseCallback 函数的基于类的实现时遇到问题

    正如标题所示 我在基于类的 C 结构中实现 OpenCV 的 mouseCallback 函数时遇到了一些麻烦 请允许我解释一下 我定义了一个名为 BriskMatching 的类 在其中创建了一个名为 mouseCallback 的成员函
  • ffmpeg AVFrame 到 opencv Mat 转换

    我目前正在开发一个使用 ffmpeg 解码接收到的帧的项目 解码后 我想将 AVFrame 转换为 opencv Mat 帧 以便我可以在 imShow 函数上播放它 我拥有的是字节流 我将其读入缓冲区 解码为 AVFrame f fope
  • 如何使用 python、openCV 计算图像中的行数

    我想数纸张 所以我正在考虑使用线条检测 我尝试过一些方法 例如Canny HoughLines and FLD 但我只得到处理过的照片 我不知道如何计算 有一些小线段就是我们想要的线 我用过len lines or len contours
  • 将 4 通道图像转换为 3 通道图像

    我正在使用 OpenCV 2 4 6 我正在尝试将 4 通道 RGB IplImage 转换为 4 通道 HSV 图像 下面是我的代码 给出错误 OpenCV 错误 未知函数断言失败 我认为 cvCvtColor 支持 3 通道图像 有没有
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码
  • 为什么Android的ImageReader类这么慢?

    我尝试了适用于 Android 3 4 1 的全新 OpenCVJavaCamera2View但它太慢了 仅显示相机视图约 15 fps 当我尝试较旧的JavaCameraView相反 它给了我很好的结果 30fps 这是我相机的极限 我想
  • OpenCv读/写视频色差

    我试图简单地使用 openCV 打开视频 处理帧并将处理后的帧写入新的视频文件 我的问题是 即使我根本不处理帧 只是打开视频 使用 VideoCapture 读取帧并使用 VideoWriter 将它们写入新文件 输出文件看起来比输入更 绿
  • 如何将多行文本插入到框架/图像中

    我使用 C 和 OpenCV 创建了一个框架 并想在其中插入几行文本 使用以下代码 putText frame My text here cvPoint 30 30 FONT HERSHEY COMPLEX SMALL 0 8 cvScal
  • 从 NumPy 数组到 Mat 的 C++ 转换 (OpenCV)

    我正在围绕 ArUco 增强现实库 基于 OpenCV 编写一个薄包装器 我试图构建的界面非常简单 Python 将图像传递给 C 代码 C 代码检测标记并将其位置和其他信息作为字典元组返回给 Python 但是 我不知道如何在 Pytho
  • 如何使用 python 定位和读取 Data Matrix 代码

    我正在尝试读取微管底部的数据矩阵条形码 我试过libdmtx http libdmtx sourceforge net 它有 python 绑定 当矩阵的点是方形时工作得相当好 但当矩阵的点是圆形时工作得更糟 如下所示 另一个复杂问题是在某
  • 使用 OpenCV 进行相机校准 - 如何调整棋盘方块大小?

    我正在使用 OpenCV Python 示例开发相机校准程序 来自 OpenCV 教程 http opencv python tutroals readthedocs io en latest py tutorials py calib3d
  • 未加载库:@rpath/libopenblasp-r0.2.19.dylib

    我应该如何解决这个问题 Monas MacBook Pro 02 02 mona python Python 3 6 1 Anaconda custom x86 64 default May 11 2017 13 04 09 GCC 4 2
  • 在Python中从整个图像中检测表格部分

    我有一张尺寸为 3500x5000 的图像 现在我只想检测整个图像中的表格部分 如果不能直接进行 OCR 处理 则对其进行裁剪和旋转 经过所有搜索后 我想到了使用裁剪图像中的每个单元格的想法https medium com coinmonk
  • 将图像加载到现有 Mat 中

    有没有办法将图像加载到现有的 Mat 中 如果没有 有没有办法控制 OpenCV 在调用 cv imread 时分配内存的位置 我只是为您的类创建一个构造函数 该构造函数接受 imread 的输入参数并将图像直接加载 并分配 到您的类中 所
  • 相机校准:如何正确进行

    我正在尝试使用棋盘格通过众所周知的张氏方法进行校准 然后进行捆绑调整 该方法在 Matlab 和 OpenCV 中都可用 有很多经验指南 但从我个人的经验来看 准确性是相当随机的 它有时可能非常好 但有时也可能非常糟糕 实际上 只需将棋盘放
  • Opencv 对象检测:ORB GPU 检测器和 SURF GPU 描述符提取器

    我只是做了一个小实验来尝试不同的检测器 描述符组合 我的代码使用 ORB GPU 检测器来检测特征 并使用 SURF GPU 描述符来计算描述符 我使用 BruteForceMatcher GPU 来匹配描述符 并使用 knnMatch 方
  • 如何用OpenCV解决图像处理相机IO延迟

    我有一个 OpenCV 程序 其工作原理如下 VideoCapture cap 0 Mat frame while true cap gt gt frame myprocess frame 问题是如果myprocess耗时较长 超过相机的I
  • 如何选择图像插值方法? (Emgu/OpenCV)

    Emgu OpenCV的 net包装器 提供的图像调整大小功能可以使用四种插值方法中的任意一种 http www emgu com wiki files 1 4 0 0 html 596dd03d 301e d3c6 4c53 c42855
  • Alpha 混合可消除图像中的接缝

    我缝合了两张图像 但在最终图像中存在可见的接缝 我正在尝试使用阿尔法混合去除那条接缝 我知道 Alpha 混合是使用cvAddweight 函数 但在此函数参数是两个图像 alpha beta gamma和目的地 我正在服用gamma 0
  • 在 virtualenvwrapper 中激活环境

    我安装了virtualenv and virtualenvwrapper用这个命令我创建了一个环境 mkvirtualenv cv 它有效 创建后我就处于新环境中 现在我重新启动了我的电脑 我想activate又是那个环境 但是怎么样 我使

随机推荐

  • 3-3 OneHot编码

    3 3 OneHot编码 请参考 数据准备和特征工程 中的相关章节 调试如下代码 基础知识 import pandas as pd g pd DataFrame gender man woman woman man woman g gend
  • 【华为机试刷题笔记】HJ16-购物单

    王强决定把年终奖用于购物 他把想买的物品分为两类 主件与附件 附件是从属于某个主件的 下表就是一些主件与附件的例子 主件 附件 电脑 打印机 扫描仪 书柜 图书 书桌 台灯 文具 工作椅 无 如果要买归类为附件的物品 必须先买该附件所属的主
  • Django高级扩展之celery使用

    Celery是一个简单 灵活 可靠的分布式系统 用于处理大量消息 同时为操作提供维护此类系统所需的工具 是一个专注于实时处理的任务队列 同时还支持任务调度 目录 应用场景 问题 解决 celery架构图 安装 配置celery Settin
  • 每日一题 day 58(DP topic)

    文章目录 problem wrong approach approach memorize dp problem 518 Coin Change 2 You are given an integer array coins represen
  • git每次都弹窗提示输入用户名和密码的解决方法

    每次进行git操作时总是要输入用户名密码很麻烦 解决方法是 加上用户本地凭证 命令如下 git config global credential helper store 然后再进行git操作 比如 git pull 打个比方 然后会拉起输
  • 什么是僵尸进程(Zombie)?

    分析Android系统启动过程的时候 init进程调用 signal handler init 函数用于设置子进程信号处理函数 它被定义在 system core init signal handler cpp中 主要用于防止init的子进
  • macos 使用串口终端

    其实很简单 先用ls看看 dev tty 哪个是具体的串口 我这里使用的edison的板子 所以插到macos上后可以看到的设备节点为 只需要使用screen 命令即可 具体的命令格式如下 screen dev tty usbserial
  • 【Node】腾讯云OSS存储上传图片

    目录 准备工作 后端Koa 前端Vue 建议 准备工作 购买腾讯云OSS存储后需要获得以下几个变量 SecretId 秘钥id SecretKey 秘钥 Bucket 存储桶名称 可在腾讯云的图像界面创建存储桶 Region 购买时选择的区
  • 苹果电脑计算机找不到打印机,Mac_Mac怎么连接打印机?苹果电脑Mac打印机设置教程 ,Mac怎么连接打印机?Mac打印机 - phpStudy...

    Mac怎么连接打印机 苹果电脑Mac打印机设置教程 Mac怎么连接打印机 Mac打印机该怎么设置呢 对于大多数 USB 打印机 您只需将打印机连接到 Mac OS X 会自动找到打印机 并下载所有驱动程序 如有必要 然后 您就可以打印了 您
  • linux进程调度,优先级、进程nice值

    我自己补充一下 APUE8 16中讲到进程调度 UNIX系统历史上对进程提供的只是基于调度优先级的粗粒度的控制 调度策略和调度优先级是由内核确定的 但是内核可以通过调整nice值选择以更低优先级运行 通过调整nice值降低它对cpu的占有
  • telnet mysql3306端口失败

    在linux上telnet远程mysql端口失败 经过上网查找后 找到多种方法 1 我在本地的Navicat上新增了一个用户 主机名是linux的ip 也可以是 百分号代表这个用户可以在任何地方对mysql进行远程连接 2 登录mysql
  • mipsel-openwrt-linux交叉编译zlog日志库并测试

    mipsel openwrt linux交叉编译zlog日志库并测试 文章目录 mipsel openwrt linux交叉编译zlog日志库并测试 一 准备 二 交叉编译测试 1 mipsel openwrt linux交叉编译过程 ar
  • 机器学习集成模型学习——Bagging集成学习(三)

    Bagging bagging的集成方式是 用1个模型 元模型 然后将这个元模型分成多个相同模型 每个模型使用训练集的一部分进行训练 得到多个基模型 最后测试时分别跑每个模型 平均结果得出这个集成模型的最终预测结果 案例代码 from sk
  • VSCode将QT(shadow build)编译输出到指定文件

    VSCode将QT shadow build 编译输出到指定文件 一 啥是shadow build 实际上就是将编译输出的文件跟源码文件放在不同地方 也就是out of source 0 00 在qtcreator中设置就很方便很方便 直接
  • C#将字符串格式化为Json

    private string ConvertStringToJson string str 格式化json字符串 JsonSerializer serializer new JsonSerializer TextReader tr new
  • 如何判断Javascript对象是否存在

    Javascript语言的设计不够严谨 很多地方一不小心就会出错 举例来说 请考虑以下情况 现在 我们要判断一个全局对象myObj是否存在 如果不存在 就对它进行声明 用自然语言描述的算法如下 if myObj不存在 声明myObj 你可能
  • 机器学习总结之第二章模型评估与选择

    2 1经验误差与过拟合 错误率 a个样本分类错误 m个样本 精度 1 错误率 误差 学习器实际预测输出与样本的真是输出之间的差异 训练误差 即经验误差 学习器在训练集上的误差 泛化误差 学习器在新样本上的误差 过拟合 学习器把训练样本学的
  • PHP自增、自减运算流程解析

    PHP自增运算解析 0x01 PHP自增运算 代码如下 0x02 PHP自减运算 代码如下 0x01 PHP自增运算 代码如下
  • Java判断一个时间是否在时间区间内

    package com liying tiger test import java text ParseException import java text SimpleDateFormat import java util Calenda
  • 图像处理——滤波器的比较

    滤波器 方框滤波 boxFilter 均值滤波 blur 高斯滤波 GaussianBlur 中值滤波 medianBlur 线性滤波器 线性滤波器经常用于剔除输入信号中不想要的频率或者从许多频率中选择一个想要的频率 常见的有 低通 高通