opencv 高斯混合模型BackgroundSubtractorMOG2实现目标跟踪
来源:互联网 发布:淘宝详情页打不开 编辑:程序博客网 时间:2024/05/22 03:17
此篇文章是学习csdn学院的个教程视频中的例子,于是跟着视频自己也学着实现了。先得准备一些基本的图像操作知识。
基本的一些图像操作
主要为图像的缩放、高斯模糊、颜色空间转化、二值化
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp>#include <opencv2/video/background_segm.hpp>#include <iostream>using namespace cv;using namespace std;void find_move_people();int main(void){ char *f = "E:\\opencv\\opencv\\sources\\samples\\wp8\\OpenCVXaml\\OpenCVXaml\\Assets\\Lena.png"; Mat lena,lena2,gasLena,lenaColor,lenaBinary; lena = imread(f); //图片调整为原来的四分之一。4、5参数是在x和y上的缩放,默认为0,最后通常也是INTER_LINEAR resize(lena, lena2, Size(lena.cols / 2, lena.rows / 2), 0.5, 15 , cv::INTER_LINEAR); // 高斯模糊,第三个为平滑窗口的size , 4、5为在水平和竖直方向的平滑系数namuda值,最后一个也通常使用默认值 GaussianBlur(lena, gasLena, Size(9, 9), 6, 6, 0); // 转换颜色空间,可以转化为yuv,下面是转化为灰度图 cvtColor(lena, lenaColor, CV_BGR2GRAY); //二值化。3为阈值,4为大于阈值的像素灰度值,5为二值化类型 threshold(lenaColor, lenaBinary, 145, 225, THRESH_BINARY); imshow("lena", lena); imshow("lena2", lena2); imshow("lena3", gasLena); imshow("lena4", lenaColor); imshow("lena5", lenaBinary); waitKey(0); }
执行的结果相信大家见过很多次,也就不列举出来了。
目标跟踪
目标视频为opencv的sample内的视频,利用高斯混合模型来实现目标跟踪:
void find_move_people(){ char *video_path = "E:\\opencv\\opencv\\sources\\samples\\data\\vtest.avi"; VideoCapture capture; Mat frame, image, foreGround, backGround, fgMask;// Ptr<BackgroundSubtractor> pBgmodel = createBackgroundSubtractorMOG2().dynamicCast<BackgroundSubtractor>(); Ptr<BackgroundSubtractorMOG2> pBgmodel = createBackgroundSubtractorMOG2(); pBgmodel->setVarThreshold(20); capture.open(video_path); if (!capture.isOpened()) { cout << "open videp eror!" << endl; } while (true) { //frame是原始帧 capture >> frame; if (frame.empty()) break; //缩小为原来四分之一,加快处理速度 resize(frame, image, Size(frame.cols / 2, frame.rows / 2), INTER_LINEAR); if (foreGround.empty()) foreGround.create(image.size() , image.type()); //得到前景图像,是黑白灰 3种灰度值的图 pBgmodel->apply(image, fgMask); // 下面是根据前景图的操作,和原图像融合得到有纹理的前景图 GaussianBlur(fgMask, fgMask, Size(5, 5) , 0); threshold(fgMask , fgMask, 10, 255, THRESH_BINARY); // 将foreGraound 所有像素置为0 foreGround = Scalar::all(0); //fgMask对应点像素值为255则 foreGround像素为image里的像素,为0则直接为0 image.copyTo(foreGround, fgMask); pBgmodel->getBackgroundImage(backGround); imshow("frame", frame); imshow("backGround", backGround); //imshow("foreGround", foreGround); imshow("fgMask", fgMask); char key = waitKey(100); if (key == 27)//27 对应得assic 码是27 break; }}
执行结果如下:
注意:opencv 3.0 后版本没有了BackgroundSubtractorMOG
更多设置参数及注释参考如下:
// 背景模型影响帧数 默认为500
mod->setHistory(1000);
// 模型匹配阈值
mod->setVarThreshold(50);
// 阴影阈值
mod->setShadowThreshold(0.7);
// 前景中模型参数,设置为0表示背景,255为前景,默认值127
mod->setShadowValue(127);
// 背景阈值设定 backgroundRatio*history
mod->setBackgroundRatio(2);
// 设置阈值的降低的复杂性
mod->setComplexityReductionThreshold(0.02);
// 高斯混合模型组件数量
mod->setNMixtures(100);
// 设置每个高斯组件的初始方差
mod->setVarInit(0.5);
// 新模型匹配阈值
mod->setVarThresholdGen(9);
阅读全文
0 0
- opencv 高斯混合模型BackgroundSubtractorMOG2实现目标跟踪
- [opencv]目标追踪之前景建模(高斯混合模型)
- 背景提取—修改高斯混合模型BackgroundSubtractorMOG2中的参数及使用
- opencv高斯混合模型
- opencv混合高斯模型
- 混合高斯模型 opencv
- 运动目标的背景建模-混合高斯背景建模和KNN模型建模的OpenCV代码实现
- OPENCV中混合高斯背景模型的实现
- OPENCV中混合高斯背景模型的实现
- OPENCV中混合高斯背景模型的实现
- OpenCV中混合高斯模型的实现
- 混合高斯背景模型及opencv实现
- OpenCv中混合高斯模型的实现
- 运动目标检测 混合高斯模型
- 高斯混合模型背景建模(BackgroundSubtractorMOG2)在opencv3.0与opencv2.4中的使用方法区别
- OpenCV运动目标检测——帧间差,混合高斯模型方法
- OpenCv的混合高斯模型
- OpenCV混合高斯模型前景分离
- 1040. 有几个PAT
- 解析XML可扩展性文档的方法
- Java web学习遇到的几个面试题
- c# 解决读取Excel混合文本类型,数据读取失败的解决方法
- 2017-8-12 Struts2学习笔记三
- opencv 高斯混合模型BackgroundSubtractorMOG2实现目标跟踪
- 第一个QNX程序
- Android基于Window.ID_ANDROID_CONTENT给定id添加子View
- 从MVC到前后端分离(REST-个人也认为是目前比较流行和比较好的方式)
- Hadoop基础教程-第11章 Hive:SQL on Hadoop(11.5 HQL:DDL数据定义)(草稿)
- java 中的对象和对象引用
- Python3之异常处理
- BlockingQueue的各种实现队列
- 【背包问题】背包问题之0-1背包、完全背包、多重背包