OpenCV视觉分析之运动分析(4)背景减除类:BackgroundSubtractorKNN的一系列set函数的使用

server/2024/10/23 9:20:04/
  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

BackgroundSubtractorKNN类有一系列的set函数,下面我们一一列举他们的名字和用法。

一系列set函数

函数setDetectShadows()

setDetectShadows() 是 cv::BackgroundSubtractorKNN 类中的一个方法,用于设置是否启用阴影检测功能。这个功能对于背景减除算法来说非常重要,因为阴影可能会干扰前景物体的正确检测。

函数setDist2Threshold()

setDist2Threshold 是 cv::BackgroundSubtractorKNN 类中的一个方法,用于设置距离平方阈值。这个阈值用于区分前景和背景,即当一个像素点与背景模型之间的距离平方大于此阈值时,该像素点会被视为前景。

函数setHistory()

setHistory 是 cv::BackgroundSubtractorKNN 类中的一个方法,用于设置历史帧数。历史帧数决定了背景模型的更新范围,即算法用来构建背景模型的时间窗口大小。

函数setkNNSamples()

setkNNSamples 是 cv::BackgroundSubtractorKNN 类中的一个方法,用于设置 K 近邻样本数量。这个参数决定了在背景建模过程中每个像素使用的近邻样本数量。

函数setNSamples()

setNSamples 是 cv::BackgroundSubtractorKNN 类中的一个方法,用于设置用于背景建模的样本数量。这个参数决定了在背景建模过程中每个像素使用的近邻样本数量。

函数setShadowThreshold()

setShadowThreshold 是 cv::BackgroundSubtractorKNN 类中的一个方法,用于设置阴影检测的阈值。这个阈值用于区分阴影和真正的前景物体。阴影检测是在背景减除算法中一个重要的部分,因为它能够帮助算法区分物体的阴影和实际的移动物体。

函数setShadowValue()

setShadowValue 是 cv::BackgroundSubtractorKNN 类中的一个方法,用于设置阴影在前景掩码中的值。这个值用于在检测到阴影时标记这些像素点,以便后续处理或分析时能够区分阴影和真正的前景物体

代码示例


#include <iostream>
#include <opencv2/opencv.hpp>int main( int argc, char** argv )
{// 创建一个 BackgroundSubtractorKNN 对象cv::Ptr< cv::BackgroundSubtractorKNN > pBackSub = cv::createBackgroundSubtractorKNN();// 设置参数pBackSub->setHistory( 500 );          // 设置历史帧数pBackSub->setDist2Threshold( 16 );    // 设置距离平方阈值pBackSub->setDetectShadows( true );   // 启用阴影检测pBackSub->setShadowThreshold( 0.5 );  // 设置阴影检测阈值pBackSub->setShadowValue( 0.2 );      // 设置阴影值// 获取当前的阴影值double shadowValue = pBackSub->getShadowValue();std::cout << "Current shadow value: " << shadowValue << std::endl;// 打开视频文件cv::VideoCapture capture( "input_video.mp4" );if ( !capture.isOpened() ){std::cerr << "Failed to open video file." << std::endl;return -1;}// 读取每一帧并处理cv::Mat frame, fgMask;while ( capture.read( frame ) ){// 应用背景减除pBackSub->apply( frame, fgMask );// 显示结果cv::imshow( "Frame", frame );cv::imshow( "FG Mask", fgMask );// 按 'q' 键退出if ( cv::waitKey( 30 ) == 'q' ){break;}}// 释放资源capture.release();cv::destroyAllWindows();return 0;
}

运行结果

在这里插入图片描述


http://www.ppmy.cn/server/134130.html

相关文章

LinkAndroid v0.0.12 发布,手机连接助手,日志查看、投屏设置、多处问题修复

LinkAndroid 是一个全能手机连接助手&#xff0c;方便快捷的连接 Android 和电脑&#xff0c;连接手机后可投屏、GIF/MP4录屏、截屏、文件管理、手机操作等功能。 功能特性 支持多手机连接&#xff0c;方便快捷控制多个手机 支持投屏&#xff0c;基于 scrcpy&#xff0c;支持手…

Qt记录使用QtAwesome

Qt记录使用QtAwesome 基本使用 基本使用 pro文件添加 CONFIG fontAwesomeFree include(QtAwesome/QtAwesome.pri) //实例化QtAwesome fa::QtAwesome* awesome new fa::QtAwesome(this); awesome->initFontAwesome();//设置外置适应 图标ICON的颜色color QVariantMap opt…

基准线markLine的值超过坐标轴范围导致markline不显示

解决问题&#xff1a;动态设置yAxis的max值&#xff08;解决基准线不在y轴范围&#xff09; yAxis: [{name: 单位&#xff1a;千,...yAxis,nameTextStyle:{...yAxis.nameTextStyle,padding: [0,26,0,24]},paddingLeft:24,paddingRight:26},{name: 单位&#xff1a;百分比,...yA…

DLNA—— 开启智能生活多媒体共享新时代

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、DLNA是什么&#xff1f;二、DLNA 协议的关键技术三、 DLNA 协议的应用场景总结 前言 在当今快节奏的生活中&#xff0c;我们常常会遇到这样的场景&#x…

【云原生】Kubernetes部署Jenkins静动Slave

Kubernetes部署Jenkins静动Slave 文章目录 Kubernetes部署Jenkins静动Slave文档介绍资源列表基础环境一、Jenkins Kubernetes清单文件二、使用静态Slave2.1、安装Kubernetes插件2.2、添加Agent2.3、使用Slave 三、使用动态Slave3.1、添加凭据3.2、配置动态Slave3.3、配置Jenkin…

【小趴菜前端实习日记5】

实习日记5 一、vue3中如何使用router&#xff08;获取this)二、ts中用object定义类型太宽泛导致Ts无法推断出正确类型三、动态设置日记封面失败vite动态引入静态资源1.方法一vue3父子组件生命周期执行顺序 2.方法二3.方法三 四、打包问题总结1.The import.meta meta-property i…

Spring security 如何进行身份认证

阅读本文之前&#xff0c;请投票支持这款 全新设计的脚手架 &#xff0c;让 Java 再次伟大&#xff01; Filter Spring security 的运行依赖于一系列 filter chains &#xff0c;其中每一组 filter chain 对应了一种类型的 request type。 当引入 spring security 框架时&…

鸿蒙应用开发:全面认识鸿蒙系统

前言 随着智能设备的普及和物联网的发展&#xff0c;对操作系统的需求也越来越多样化。鸿蒙操作系统作为一款面向全场景的分布式操作系统&#xff0c;其适用范围非常广泛&#xff0c;从智能手机到家用电器&#xff0c;再到工业设备&#xff0c;都能找到应用场景。特别是在智能…