c++视觉----方框滤波

news2024/9/30 11:24:33

方框滤波

cv::boxFilter()函数是OpenCV中用于应用方框滤波的函数。方框滤波是一种基本的平滑滤波方法,它使用一个均匀权重的矩形核来平均处理像素的值。

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

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,  // 是否进行归一化,默认为true
    int borderType = cv::BORDER_DEFAULT   // 边界处理方式,默认为BORDER_DEFAULT
);

参数解释:

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

下面是一个示例代码,演示如何使用cv::boxFilter()函数应用方框滤波:

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>

int main() {
    // 读取图像
    cv::Mat image = cv::imread("1.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::boxFilter(image, smoothed_image, -1, cv::Size(3, 3));

    // 显示原始图像和平滑后的图像
    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;
}

在这里插入图片描述

使用相机实时方框滤波


#include <opencv2/opencv.hpp>

// 全局变量,用于存储滑动条的值
int kernelSize = 3;

// 回调函数,用于处理滑动条的值变化
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::boxFilter(frame, smoothed_frame, -1, cv::Size(kernelSize, kernelSize));

        // 显示实时摄像头图像和平滑后的图像
        cv::imshow("Live Camera Feed", frame);
        cv::imshow("Smoothed Frame", smoothed_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/1072918.html

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

相关文章

[引擎开发] 杂谈ue4中的Vulkan

接触Vulkan大概也有大半年&#xff0c;概述一下自己这段时间了解到的东西。本文实际上是杂谈性质而非综述性质&#xff0c;带有严重的主观认知&#xff0c;因此并没有那么严谨。 使用Vulkan会带来什么呢&#xff1f;简单来说就是对底层更好的控制。这意味着我们能够有更多的手段…

为什么要学C语言及C语言存在的意义

为什么要学C语言及C语言存在的意义 汇编生C&#xff0c;C生万物。linus说自己最喜欢的语言就是C语言&#xff0c;因为看到写出的代码就能想到对应的汇编码。一方面说明C语言足够简洁&#xff0c;没有像C中一样的复杂概念封装&#xff0c;另一方面也说明C语言足够的底层&#xf…

二、Nginx启停命令和升级更新

1.Nginx服务器启停命令 1.1Nginx服务的信号控制&#xff08;省略&#xff09; 1.2Nginx的命令行控制 nginx -? 或者 nginx -h显示帮助信息nginx -v打印版本号信息并退出nginx -V打印版本号信息和配置信息并退出nginx -t测试nginx的配置文件语法是否正确并退出nginx -T测试ng…

弱电工程师和单片机工程师未来那行更有前景?

弱电工程师和单片机工程师未来那行更有前景? 单片机行业不太懂&#xff0c;但是感觉上&#xff0c;单片机行业会更加专业一点&#xff0c;偏研发多一点。 下面稍微说下弱电工程师这个部分&#xff0c;从两个维度上去说&#xff0c;一个是做哪些事情&#xff0c;一个是做哪些系…

L1-035 情人节 c++解法

题目再现 以上是朋友圈中一奇葩贴&#xff1a;“2月14情人节了&#xff0c;我决定造福大家。第2个赞和第14个赞的&#xff0c;我介绍你俩认识…………咱三吃饭…你俩请…”。现给出此贴下点赞的朋友名单&#xff0c;请你找出那两位要请客的倒霉蛋。 输入格式&#xff1a; 输入…

鉴源实验室 | AUTOSAR SecOC:保障汽车通信的安全

作者 | 沈平 上海控安可信软件创新研究院汽车网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 在现代汽车行业中&#xff0c;随着电子控制单元&#xff08;ECUs&#xff09;的普及以及车与车之间通信的不断增加&#xff0c;确…

百度网盘加群图解教程

最近很多朋友说不知道怎么操作百度网盘群&#xff0c;这里弄一个图解教程&#xff0c;大家可以学一下~ 步骤1&#xff1a;获取群号 以这个群号为例子&#xff1a;628174363 步骤2&#xff1a;搜索百度盘群 步骤3&#xff1a;找文件库 加群之后&#xff0c;点击右上角的文件库…

TPU编程竞赛|算丰助力2023 CCF大数据与计算智能大赛!

目录 赛题介绍 赛题背景 赛题任务 赛程安排 初赛阶段 2023/09/25-11/27 决赛阶段 2023/11/28-12/17 评分机制 奖项设置 赛题奖项 赛事奖项 近日&#xff0c;第十一届2023CCF大数据与计算智能大赛&#xff08;简称CCF BDCI&#xff09;正式启动报名&#xff0c;本次大…

低功耗国产蓝牙芯片OM6621/HS6621- 蓝牙防丢器

在繁忙的生活中&#xff0c;我们往往会因为疏忽而丢失贵重物品&#xff0c;如钱包、钥匙、手机等&#xff0c;给生活带来不小的麻烦。然而&#xff0c;现代科技正为我们提供一种聪明的解决方案——蓝牙防丢器。这款小巧智能的装置不仅保护您的财物&#xff0c;还为您的生活带来…

好消息:用 vue3+layui 共同铸造我们新的项目

前言&#xff1a; layui这个框架不知道多少人还在关注着&#xff0c;记得第一次接触它是在18年&#xff0c;后来随着vue&#xff0c;react的盛行&#xff0c;jquerylayui的模式受到了特别大的冲击&#xff0c;后来作者都放弃维护他的官方网站&#xff0c;转而在github/gitee上做…

多测师肖sir_高级金牌讲师_python的安装002

一、python安装 1、python包&#xff08;我们目前学习的版本是3.7&#xff09; python-3.7.3 版本 2、Python下载的官网&#xff1a;https://www.python.org/downloads/ 最新包&#xff1a;3.12 3、下载好python安装包&#xff0c;在新建一个python文件件&#xff0c;我们要…

maven环境配置

1.从官网下载 Maven – Download Apache Maven 2.配置maven环境 把下载的maven放到一个固定的目录 配置环境变量 配置后执行mvn -version&#xff0c;如下提示就是成功了。 3.Idea配置maven 4.配置maven源&#xff0c;下载速度更快 <mirror> <id>nexu…

30个接口自动化测试面试题,看完的现在已经在办理入职了...

1. 什么是接口自动化测试&#xff1f; 答&#xff1a;接口自动化测试是指使用自动化工具对接口进行测试&#xff0c;验证接口的正确性、稳定性和性能等方面的指标。 2. 为什么要进行接口自动化测试&#xff1f; 答&#xff1a;接口自动化测试可以提高测试效率&#xff0c;减…

基于maven的项目搭建(已跑通)

1、直接选择archetype-webapp即可 &#xff08;这里很多人会觉得很慢–解决方案&#xff1a;https://blog.csdn.net/qq_45591895/article/details/133705674?spm1001.2014.3001.5501&#xff09; 2、手动添加一个java目录即可。 3、添加Tomcat 3、这就跑通了&#xff0c;可以…

Typescript 笔记:初识Typescript

1 TypeScript介绍 TypeScript 是一种给 JavaScript 添加特性的语言扩展TypeScript 是 JavaScript 的超集&#xff0c;扩展了 JavaScript 的语法&#xff0c;因此现有的 JavaScript 代码可与 TypeScript 一起工作无需任何修改&#xff0c;TypeScript 通过类型注解提供编译时的静…

数据结构与算法(八):排序算法

参考引用 Hello 算法 Github&#xff1a;hello-algo 1. 选择排序 选择排序的工作原理非常直接&#xff1a;开启一个循环&#xff0c;每轮从未排序区间选择最小的元素&#xff0c;将其放到已排序区间的末尾&#xff0c;设数组的长度为 n 初始状态下&#xff0c;所有元素未排序&…

WEEX编译|加密市场三季度回顾及未来展望

作者&#xff1a;Greg Cipolaro&#xff0c;NYDIG 全球研究主管 编译&#xff1a;WEEX 唯客交易所 本文要点&#xff1a; ● 在充满挑战的第三季度&#xff0c;比特币价格下跌 11.1%&#xff0c;因为众多资产类别都在努力应对利率上升的影响和对经济衰退的担忧。 ● 比特币…

接口测试报告的输出

1、对小极客首页跳转接口测试 2、写接口用例 以TestXjkLinks.py命名 1 # --*-- coding:utf-8 --*--2 3 import requests4 import unittest5 import time6 7 8 class TestXjkLinks(unittest.TestCase):9 10 def test_learn(self): 11 u"""首页学习…

Android 13 骁龙相机点击拍照流程分析(一)——点击拍照到更新到左下角缩略图

一.背景 由于最近客户定制需要将文件挂载类型修改为sdcardfs,由于修改了文件挂载类型,导致了骁龙相机拍照后不能点击进入相册,故对骁龙相机从点击事件开始进行问题的排查,此处不介绍最终的sdcardfs挂载后的问题解决方案,有兴趣可以参考jira单:SW2QCM6490-1233 二.流程介…

运行软件提示丢失msvcr120.dll文件怎么办?msvcr120.dll丢失的5个最新解决方法

找不到msvcr120.dll是一个常见的错误信息&#xff0c;通常会在用户尝试运行某些程序或游戏时出现。msvcr120.dll是 Windows 操作系统中的一个动态链接库文件&#xff0c;它包含了 C 运行时库的一些函数和类&#xff0c;对于许多程序和游戏的正常运行至关重要。 当用户遇到找不到…