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

news2024/11/16 16:45:58

均值滤波

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.coloradmin.cn/o/1074189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记一次 .NET某账本软件 非托管泄露分析

一&#xff1a;背景 1. 讲故事 中秋国庆长假结束&#xff0c;哈哈&#xff0c;在老家拍了很多的短视频&#xff0c;有兴趣的可以上B站观看&#xff1a;https://space.bilibili.com/409524162 &#xff0c;今天继续给大家分享各种奇奇怪怪的.NET生产事故&#xff0c;希望能帮助…

c++视觉处理---高斯滤波

高斯滤波处理 高斯滤波是一种常用的平滑滤波方法&#xff0c;它使用高斯函数的权重来平滑图像。高斯滤波通常用于去除噪声并保留图像中的细节。在OpenCV中&#xff0c;可以使用cv::GaussianBlur()函数来应用高斯滤波。 以下是cv::GaussianBlur()函数的基本用法&#xff1a; …

区块链技术的飞跃: 2023年的数字革命

随着时代的推进和技术的不断创新&#xff0c;2023年成为区块链技术飞跃发展的一年。区块链&#xff0c;一个曾经只是数字货币领域的技术&#xff0c;现在已经逐渐渗透到各个行业&#xff0c;成为推动数字经济发展的重要力量。在这个数字革命的时代&#xff0c;我们探讨区块链技…

纸黄金效率太低不如做现货

如果从字面上的意义去理解&#xff0c;纸黄金就是在账面上交易的黄金&#xff0c;具体来说它是国内银行为客户提供的一种记账式的黄金买卖&#xff0c;交易的记录和买卖的盈亏值&#xff0c;都只会在预先开设的账户上体现&#xff0c;投资过程中不涉及实物黄金的交收。 对于追求…

Docker基础(CentOS 7)

参考资料 hub.docker.com 查看docker官方仓库&#xff0c;需要梯子 Docker命令大全 黑马程序员docker实操教程 &#xff08;黑马讲的真的不错 容器与虚拟机 安装 yum install -y docker Docker服务命令 启动服务 systemctl start docker停止服务 systemctl stop docker重启…

LocalDateTime、LocalDate、Date、String相互转化大全及其注意事项

LocalDateTime、LocalDate、Date、String相互转化大全及其注意事项 一、前言 大家在开发过程中必不可少的和日期打交道&#xff0c;对接别的系统时&#xff0c;时间日期格式不一致&#xff0c;每次都要转化&#xff01; 二、LocalDateTime、LocalDate、Date三者联系 这里先…

二叉搜索树的基础操作

如果对于二叉搜索树不是太清楚&#xff0c;为什么要使用二叉搜索树&#xff1f;作者推荐&#xff1a;二叉搜索树的初步认识_加瓦不加班的博客-CSDN博客 定义节点 static class BSTNode {int key; // 若希望任意类型作为 key, 则后续可以将其设计为 Comparable 接口Object val…

查看本机Arp缓存,以及清除arp缓存

查看Arp缓存目录 Windows 系统使用 winR&#xff0c;输入cmd 在命令窗口输入 arp -a 删除Arp缓存目录 在命令窗口输入 arp -d * 查看主机路由表

js中 for、forEach、for...in、for...of循环的区别和使用

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 js中 for、forEach、for...in、for...of循环的区别 我们全部以以下数组举例 var arr [1,2,3,4,5];for循环 for(语句 1; 语句 2; 语句 3){} &#xf…

ThreeJS-3D教学八-OBJLoader模型加载+动画

先看效果图&#xff1a; 本篇给大家介绍下模型加载的知识&#xff0c;用到了OBJLoader对应的模型&#xff0c;为了增加趣味性&#xff0c;花了些时间&#xff0c;利用new THREE.Points获取到模型上的点&#xff0c;做了一个动画效果&#xff0c;其实就是操作 Y轴上的点&#x…

[已解决]java-sun.security.validator.ValidatorException: PKIX path building failed

找了好多文章,终于找到个解决办法! 报错详情内容 解决办法 第一种&#xff08;适用于本人解决办法&#xff09;&#xff1a; httpclient-4.5.jar 定时发送http包&#xff0c;忽然有一天报错&#xff0c;http证书变更引起的。 之前的代码 try {CloseableHttpClient httpCli…

多测师肖sir_高级金牌讲师_python之基本使用003

python之基本使用 一、基础使用 1、python中的打印方式 格式&#xff1a;print&#xff08;打印内容&#xff09; 案例&#xff1a;print&#xff08;12&#xff09; 注意点&#xff1a; 打印的对象中&#xff1a;数值可以直接引用&#xff0c;字母或中文要加上引号&#xff08…

Eclipse导入项目之后中文注释乱码

1 问题 Eclipse导入项目之后中文注释乱码。原因&#xff1a;中文乱码的原因是因为编码的关系 2 解决方法 记事本打开查看编码方式 修改eclipse编码方式 在Eclipse中更改文件的编码方式可以通过以下步骤进行&#xff1a; 打开Eclipse&#xff0c;并导航到要更改编码方式的…

量化交易全流程(七)

本节目录 资金分配 实盘交易 vn.py框架 我将重点介绍资金分配的基础模型和实现。当然&#xff0c;这里介绍的模型是最基础的模型&#xff0c;现实实践中往往并不能直接使用。因为后续我将加入机器学习和深度学习在量化交易领域中的应用。 现代 / 均值——方差资产组合理论…

高级工技能等级认定理论部分 看了就过关

4 理论一_职业道德 4.1职业道德基本知识 4.1.1练习 4.2职业守则 4.2.1练习1 4.2.1练习2 5 理论二 _基础知识 5.1 法律责任 5.1.1 练习1 5.1.2 练习2 5.1.3 练习3 5.2 基础知识 5.2.1 练习1 5.2.2 练习2 5.2.3 练习3 5.2.4 练习4 6 理论三_网络与信息安全防护 6.1 网络相…

部署企业级ChatGPT,将AI整合进工作

引言 3月份AI应用大爆发催生了国内大量需求。 然而&#xff0c;所有的需求都不可避免得遇到很多非技术性的问题&#xff1a; 部署开源模型的成本巨大&#xff0c;且效果成谜&#xff0c;65B的模型推理应用最少需要130G显存&#xff0c;而微调训练则需要额外添加8倍的资源。 …

基于YOLO的BIM对象检测

我在此过程中使用的 BIM 数据集取自澳大利亚卫生设施指南。 该数据集包含一组房间数据表和房间布局表&#xff0c;旨在提供典型房间类型的合规示例&#xff0c;并减少规划和设计这些房间时“重新发明轮子”的需要。 推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 1、合…

23.5 Bootstrap 框架6

1. 表单布局 部分表单类名介绍: * 1. form-label: 表单标签样式类, 用于定义表单的标签样式. * 2. form-control: 表单控件样式类, 用于定义输入框, 文本域等表单元素的样式.表单元素<input>, <textarea>, <select>在使用.form-control类的情况下, 宽度都是…

取消激光雷达/不升级Orin,小鹏P5改款背后的行业「痛点」

9月25日&#xff0c;小鹏汽车正式发布了旗下改款车型—2024款小鹏P5&#xff08;15.69-17.49万元&#xff09;。车型精简、降本增效&#xff08;减配&#xff09;成为新亮点。 在配置变化方面&#xff0c;智驾成为牺牲品。其中&#xff0c;高配Pro车型继续保留英伟达Xavier&…

Cpolar内网穿透工具在windows和Linux上具体使用

Cpolar内网穿透工具在windows和Linux上具体使用 一、Linux上部署的项目通过内网穿透实现外网访问项目二、Windows上部署的项目通过内网穿透实现外网访问项目 一、Linux上部署的项目通过内网穿透实现外网访问项目 一个免费的内网穿透方式&#xff0c;简单方便。 网址&#xff1a…