我是靠谱客的博主 畅快樱桃,最近开发中收集的这篇文章主要介绍opencv-视频图像的前景动态追踪,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  • opencv2的前景分割方法主要是高斯混合背景/前景分割方法,而3.0版本才增加了knn前背景分割器。
  • 高斯混合背景/前景分割方法可以通过两个类BackgroundSubtractorMOG 和BackgroundSubtractorMOG 2实现,测试后发现BackgroundSubtractorMOG 2的实现效果要好。
  • 关于这个构建这个类相关的参数说明参见博客:http://blog.csdn.net/xiaowei_cqu/article/details/23689189
  • 下面我一个bgSubtractor类,然后在此类中实现一个public方法:videoStractorByMog2(VideoCapture& video),使得输入是一个要处理的视频,输出是分割后前背景二值化视频和以及前景的最大外接矩形视频。

  • 算法效果如下:
  • 输入:
    这里写图片描述
  • 输出:
    这里写图片描述

  • 实例代码
#ifndef BGSUBTRACTOR_H_
#define BGSUBTRACTOR_H_
#include"ordImgProcLib.h"
class bgSubtractor{
private:
public:
void videoStractorByMog2(VideoCapture& video){
Mat frame;
Mat fMask;//前景mask
Mat th;//二值化图像
double rate = video.get(CV_CAP_PROP_FPS);
int delay = 1000 / rate;
BackgroundSubtractorMOG2 bgMog2(20, 30, true);
bool stop(false);
while (!stop){
if (! video.read(frame)){
break;
}
// press any key to stop

if (waitKey(delay) >= 0)
stop = true;
bgMog2(frame, fMask, 0.01);
//前景区域二值化,将非白色(0 - 245)的非前景区域(包含背景以及阴影)均设为0,前景的白色(245 - 255)设置为255
threshold(fMask, th, 245, 255, THRESH_BINARY);
//二值化形态学处理
//寻找外轮廓
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(th, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
//寻找外轮廓的最大外截矩形
vector<vector<Point>>::const_iterator itContours = contours.begin();
for (int c=0; itContours != contours.end(); ++itContours){
if (itContours->size() >= 100){
Rect r = boundingRect(contours[c]);
rectangle(frame, r, Scalar(0,255,0), 2);
}
c++;
}
imshow("fmask", fMask);
imshow("frame", frame);
}
video.release();
}
};
#endif

最后

以上就是畅快樱桃为你收集整理的opencv-视频图像的前景动态追踪的全部内容,希望文章能够帮你解决opencv-视频图像的前景动态追踪所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部