当前位置: 首页 > news >正文

c++视觉处理---均值滤波

均值滤波

cv::blur()函数是OpenCV中用于应用均值滤波的函数。均值滤波是一种简单的平滑技术,它计算每个像素周围像素的平均值,并用该平均值替代原始像素值。这有助于降低图像中的噪声,并可以模糊图像的细节。

以下是cv::blur()函数的基本用法:

void cv::blur(cv::InputArray src,         // 输入图像cv::OutputArray dst,        // 输出图像cv::Size ksize,             // 滤波核大小,通常是一个奇数cv::Point anchor = cv::Point(-1,-1),  // 锚点位置,默认为核的中心int borderType = cv::BORDER_DEFAULT   // 边界处理方式,默认为BORDER_DEFAULT
);

参数解释:

  • src: 输入图像。
  • dst: 输出图像,将平滑后的图像存储在这里。
  • ksize: 滤波核的大小,通常是一个奇数,例如(3, 3)(5, 5)。较大的核将导致更强烈的平滑效果。
  • anchor: 锚点位置,默认为(-1, -1),表示核的中心。
  • borderType: 边界处理方式,控制在图像边界处如何处理滤波操作。通常使用默认值cv::BORDER_DEFAULT

以下是示例代码,演示如何使用cv::blur()函数进行均值滤波:

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>int main() {// 读取图像cv::Mat image = cv::imread("your_image.jpg", cv::IMREAD_COLOR);if (image.empty()) {std::cerr << "Could not open or find the image!" << std::endl;return -1;}// 创建一个平滑后的图像副本cv::Mat smoothed_image;// 使用均值滤波平滑图像cv::blur(image, smoothed_image, cv::Size(5, 5)); // 5x5的均值滤波器// 显示原始图像和平滑后的图像cv::namedWindow("Original Image", cv::WINDOW_NORMAL);cv::namedWindow("Smoothed Image", cv::WINDOW_NORMAL);cv::imshow("Original Image", image);cv::imshow("Smoothed Image", smoothed_image);cv::waitKey(0);return 0;
}

这个示例使用cv::blur()函数将一个5x5的均值滤波器应用于输入图像,从而平滑图像。您可以根据需要选择不同大小的滤波器核以获得不同程度的平滑效果。确保已正确配置OpenCV以构建和运行C++代码。

在这里插入图片描述

使用相机实时均值滤波

#include <opencv2/opencv.hpp>// 全局变量,用于存储滑动条的值
int kernelSize = 5;// 回调函数,用于处理滑动条的值变化
void onTrackbar(int value, void* userdata) {// 从userdata中获取VideoCapture对象cv::VideoCapture* cap = static_cast<cv::VideoCapture*>(userdata);// 创建窗口cv::namedWindow("Live Camera Feed", cv::WINDOW_NORMAL);while (true) {cv::Mat frame;// 从相机中读取一帧图像*cap >> frame;if (frame.empty()) {std::cerr << "Failed to read frame from the camera!" << std::endl;break;}// 创建一个平滑后的图像副本cv::Mat smoothed_frame;// 使用均值滤波平滑图像,核的大小由滑动条值决定cv::blur(frame, smoothed_frame, cv::Size(kernelSize, kernelSize));// 显示实时摄像头图像和平滑后的图像cv::imshow("Live Camera Feed", smoothed_frame);cv::imshow("Smoothed Frame", frame);// 检查键盘输入,如果按下ESC键,退出循环char key = cv::waitKey(1);if (key == 27) // 27对应ESC键的ASCII码break;}
}int main() {// 打开本地相机(通常相机编号为0表示默认相机,如果有多个相机,则可能需要调整编号)cv::VideoCapture cap(0);if (!cap.isOpened()) {std::cerr << "Could not open the camera!" << std::endl;return -1;}// 创建窗口cv::namedWindow("Live Camera Feed", cv::WINDOW_NORMAL);// 创建滑动条cv::createTrackbar("Kernel Size", "Live Camera Feed", &kernelSize, 30, onTrackbar, &cap);// 初始化一次滑动条回调函数以显示默认值onTrackbar(kernelSize, &cap);// 释放摄像头资源和关闭窗口cap.release();cv::destroyAllWindows();return 0;
}
http://www.lryc.cn/news/186299.html

相关文章:

  • QT基础入门——Qt事件(五)
  • 自学黑客方法-----(网络安全)
  • Dockerfile自定义容器
  • (5)SpringMVC处理携带JSON格式(“key“:value)请求数据的Ajax请求
  • 【iOS】——仿写计算器
  • 公安机关警务vr综合实战模拟训练提高团队合作能力
  • MySQL-1(12000字详解)
  • voc数据集格式与yolo数据集格式的区别及相互转化
  • 超详细!Android Termux上如何安装MySQL,内网穿透实现公网远程访问
  • TSNE降维学习
  • 基于Python+Selenium的web自动化测试框架详解
  • C (1094) : DS双向链表—前驱后继
  • mp4视频太大怎么压缩变小?
  • 利用easy excel 实现文件导出
  • LongLoRA:超长上下文,大语言模型高效微调方法
  • 【漏洞复现】某 NVR 视频存储管理设备远程命令执行
  • 若依前端-应用路径发布和使用
  • Mojo 正式发布,Rust 能否与之匹敌?
  • opencv实现抠图,图像拼接,图像融合
  • 照片处理软件Lightroom Classic mac中文版功能介绍(Lrc2021)
  • asp.net高校留学生信息管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
  • C# - Opencv应用(1) 之VS下环境配置详解
  • rsync 远程同步实现快速、安全、高效的异地备份
  • 医学访问学者面试技巧
  • 【19】c++设计模式——>桥接模式
  • 网络安全:六种常见的网络攻击手段
  • 使用HbuilderX运行uniapp中小程序项目
  • 基于PHP的水果商城网站,mysql数据库,前台+后台,原生PHP,PHP study(小皮),完美运行,有一万字报告。
  • 【uniapp】自定义导航栏时,设置安全距离,适配不同机型
  • JAVA经典百题之数组逆序输出