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

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

算法描述

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

一系列函数

函数getDetectShadows()

getDetectShadows 是 cv::BackgroundSubtractorKNN 类中的一个方法,用于获取当前是否启用了阴影检测的功能。

函数getDist2Threshold()

getDist2Threshold 是 cv::BackgroundSubtractorKNN 类中的一个方法,用于获取当前设置的距离阈值。这个阈值用于确定前景像素与背景模型之间的距离,从而决定哪些像素被认为是前景。

函数getHistory()

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

函数getkNNSamples()

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

函数getNSamples()

在 cv::BackgroundSubtractorKNN 类中,getNSamples() 方法用于获取当前设置的 K 近邻样本数量。这是 OpenCV 背景减除算法的一个重要参数,用于控制背景模型的鲁棒性和响应速度。

函数getShadowThreshold()

getShadowThreshold() 是 cv::BackgroundSubtractorKNN 类中的一个方法,用于获取当前设置的阴影检测阈值。这个阈值决定了在检测到可能的阴影区域时,算法如何处理这些区域。

函数getShadowValue()

getShadowValue() 是 cv::BackgroundSubtractorKNN 类中的一个方法,用于获取当前设置的阴影值。这个值决定了在输出的前景掩码中,阴影区域是如何标记的。

代码示例

cpp 复制代码
#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->setShadowValue( 127 );     // 设置阴影值

    // 获取当前的阴影值
    int shadowValue      = pBackSub->getShadowValue();
    bool detectshadow    = pBackSub->getDetectShadows();
    double distThreshold = pBackSub->getDist2Threshold();
    int history          = pBackSub->getHistory();
    int nnsamples        = pBackSub->getkNNSamples();
    int nsamples         = pBackSub->getNSamples();
    int shadowThreshold  = pBackSub->getShadowThreshold();

    std::cout<< "Current shadow value: " << shadowValue << std::endl;
    std::cout << "Current distance threshold value: " << distThreshold << std::endl;
    std::cout << "history: " << history << std::endl;
    std::cout << "nsamples: " << nsamples << std::endl;
    std::cout << "shadow threshold: " << shadowThreshold << std::endl;
    


    // 打开视频文件
    cv::VideoCapture capture( 0 );
    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;
}

运行结果

相关推荐
其实防守也摸鱼6 小时前
推荐一个自动化教育SRC漏洞挖掘系统--AutoHunter
运维·开发语言·人工智能·学习·安全·web安全·自动化
振浩微433射频芯片6 小时前
从门锁到考勤,VRC522B如何在近场读卡场景中“稳坐C位”?
网络·人工智能·单片机·物联网
码视野6 小时前
多宠 RFID 颈圈识别与湿粮半导体制冷保鲜分餐喂食器解决方案(软硬件一体化)
大数据·人工智能·python
九硕智慧建筑一体化厂家6 小时前
智慧建筑高效管控!楼宇自控系统赋能新能源园区智能运维
运维·人工智能·笔记·智慧城市
2601_954526757 小时前
2026 生成式搜索引擎底层技术演进与 GEO优化服务商推荐:大模型检索增强(RAG)管道与语义对齐工程实战
大数据·人工智能·搜索引擎
我有满天星辰7 小时前
Spring AI Prompt 实战:System Prompt、User Prompt 与 PromptTemplate
人工智能·spring·prompt
A15362557 小时前
WMS 仓储管理系统推荐:企业如何选适配的仓储管理系统
大数据·人工智能
学习中.........7 小时前
Transformer 训练资源估算:以 CS336 GPT-2 XL 配置为例
人工智能·python·算法·机器学习·自然语言处理
Setsuna_F_Seiei12 小时前
前端的 AI 学习之路 02 之 Provider 与 Structured Output - 规范化模型输入输出
人工智能·agent·ai编程
JavaPub-rodert12 小时前
王仕宇RAG 实战教程(二):从 0 搭建一个可运行的 RAG 知识库——Embedding、Qdrant 与问答实战
人工智能·embedding