基于OpenCV的背景提取
Background extraction based on OpenCV
我试图制作一个基于openCV的程序,提取视频中的背景,我的问题是该程序将强度(光)的微小变化作为整个背景的变化,这是我的代码,我基于openCV样本编写的,
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/video/background_segm.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <opencv2calib3dcalib3d.hpp>
#include <iostream>
int main(int argc, const char** argv){
cv::VideoCapture cap(0);
cv::BackgroundSubtractorMOG2 bg_model;
bg_model.history = 10000;
bg_model.bShadowDetection = false;
cv::Mat img, fgmask,fgimg,smooth;
bool update =true;
int key =0;
while(key !=27){
cap >> img;
cv::blur(img,smooth,cv::Size(20,10));
//update the model
if(fgimg.empty())
fgimg.create(img.size(),img.type());
bg_model(smooth,fgmask,update ? -1 :0);
fgimg = cv::Scalar::all(0);
img.copyTo(fgimg,fgmask);
cv::imshow("fgimg",fgimg);
cv::imshow("fgmask",fgmask);
cv::imshow("img",img);
std::cout << bg_model.backgroundRatio << std::endl;
if(key == 'x')
update= !update;
if( update){
std::cout << "update on " <<std::endl;
}
else{
std::cout << "update off "<<std::endl;
}
key = 0;
key = cv::waitKey(10);
}
}
有谁知道如何降低程序的敏感性到强度。
提前感谢任何帮助!!
您可以使用initialize
方法通过改变bg_model
的nmixtures
和minArea
值来发挥灵敏度
链接:http://www710.univ-lyon1.fr/~eguillou/documentation/opencv2/classcv_1_1_background_subtractor_m_o_g2.html
相关文章:
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 如何从 std::atomic 中提取指针 T<T>?
- 为什么istream不支持右值提取
- 如何在全屏模式下(在OpenGL中)使背景透明
- 如何设置一个范围来提取我想要获得的信息
- 使用窗口中的QSlider更改背景音量
- 视觉工作室项目.提取源文件夹名称
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- 从字符串中提取整数并形成一个数组
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- 从 std::vector<无符号字符>切片中提取 int?
- 在C++中使用重载提取运算符时出现问题
- 在 Qt(C++) 中使用 QProcess 解压缩 - 提取目录问题
- 从黑色背景 OpenCV C++中提取对象
- 从低对比度背景中提取对象
- 使用 GrabCut 提取背景图像
- 基于OpenCV的背景提取
- 使用OpenCv进行背景提取
- 使用opencv mogdetector和c++从实时摄像机馈电中提取背景