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

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

  • 操作系统: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.kler.cn/news/365833.html

相关文章:

  • 8.three.js相机详解
  • 【K8s】Kubernetes 证书管理工具 Cert-Manager
  • sass的使用
  • Android 原生开发与Harmony原生开发浅析
  • LabVIEW提高开发效率技巧----事件日志记录
  • Java.6--多态-设计模式-抽象父类-抽象方法
  • 前端-基础CSS 知识总结
  • 六,Linux基础环境搭建(CentOS7)- 安装HBase
  • Python与MySQL
  • 3.添加缓存和缓存更新策略
  • 前端拦截302重定向
  • flowable 去掉自带的登录权限
  • Scala的多态
  • 工作使用篇:如何在centos系统中安装anaconda
  • 【AI换装整合及教程】CatVTON:时尚与科技的完美融合
  • 【linux】服务器Ubuntu20.04安装cuda11.8教程
  • 从零到一:如何使用直播美颜SDK开发视频美颜平台
  • C# Window Form 基础
  • 初探Vue前端框架
  • 【等保测评】安全物理环境
  • 腾讯云DBA面试(一面)
  • 大语言模型训练方式探索(基于llma3模型)
  • ThinkPhp配置中间件解决跨域问题
  • C#WPF的XAML的语法详谈和特性
  • 【C/C++ Qt shared_ptr | make_shared | QSharedPointer 】绕圈圈
  • [Redis] Redis数据持久化