- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
K-最近邻(K-nearest neighbours, KNN)基于的背景/前景分割算法。
该类实现了如 319中所述的 K-最近邻背景减除。如果前景像素的数量很少,则非常高效、
cv::BackgroundSubtractorKNN 是 OpenCV 中用于背景减除的一种具体实现,它是 cv::BackgroundSubtractor 基类的一个派生类。该类使用 K 最近邻(K-Nearest Neighbors, KNN)算法来检测前景物体。KNN 方法在背景建模方面具有较好的性能,特别是在处理光照变化和动态背景方面。
代码示例
cpp
#include <iostream>
#include <opencv2/opencv.hpp>
int main( int argc, char** argv )
{
// 创建一个 BackgroundSubtractorKNN 对象
cv::Ptr< cv::BackgroundSubtractor > pBackSub = cv::createBackgroundSubtractorKNN();
// 设置参数
// 打开视频文件
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;
}