今天的目标是用OpenCV实现对运动目标的检测,这里选用三帧帧差法。代码如下:

#include

#include

#include

#include

#include

double Threshold_index=0;

const int CONTOUR_MAX_AERA = 200;

void trackbar(int pos)

{

Threshold_index=(double)pos;

}

int main(int argc, char* argv[])

{

CvCapture *capture=cvCaptureFromCAM(0);

int n_cnt=0;

IplImage *img=NULL,

*img_gray1=NULL,

*img_gray2=NULL,

*img_gray3=NULL,

*img_diff1=NULL,

*img_diff2=NULL,

*img_diff_and=NULL,

*img_binary=NULL,

*img_dilate=NULL;

CvMemStorage *stor;

CvSeq *cont;

stor=cvCreateMemStorage(0);

cont=cvCreateSeq(CV_SEQ_ELTYPE_POINT,sizeof(CvSeq),sizeof(CvPoint),stor);

cvNamedWindow("test",CV_WINDOW_AUTOSIZE);

cvNamedWindow("dilate",CV_WINDOW_AUTOSIZE);

img=cvQueryFrame(capture);

img_gray1=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);

img_gray2=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);

img_gray3=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);

img_diff1=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);

img_diff2=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);

img_diff_and=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);

img_binary=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);

img_dilate=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);

int index=1;

cvCreateTrackbar("Threshold","test",&index,255,trackbar);

while(img=cvQueryFrame(capture))

{

if(n_cnt%3==0)

cvCvtColor(img,img_gray1,CV_BGR2GRAY);

else if(n_cnt%3==1)

cvCvtColor(img,img_gray2,CV_BGR2GRAY);

else if(n_cnt%3==2)

cvCvtColor(img,img_gray3,CV_BGR2GRAY);

char c=(char)cvWaitKey(25);

if(c==27)

break;

if(n_cnt>3)

{

cvAbsDiff(img_gray1,img_gray2,img_diff1);

cvAbsDiff(img_gray2,img_gray3,img_diff2);

cvAnd(img_diff1,img_diff2,img_diff_and);

cvThreshold(img_diff_and,img_binary,Threshold_index,255,CV_THRESH_BINARY);

cvShowImage("test",img_binary);

cvDilate(img_binary,img_dilate);

//cvShowImage("dilate",img_dilate);

cvFindContours(img_dilate,stor,&cont,sizeof(CvContour),CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0));

for(;cont;cont = cont->h_next)

{

CvRect r = ((CvContour*)cont)->rect;//子类转换为父类例子

if(r.height * r.width > CONTOUR_MAX_AERA) // 面积小的方形抛弃掉

{

cvRectangle(img, cvPoint(r.x,r.y),

cvPoint(r.x + r.width, r.y + r.height),

CV_RGB(255,0,0), 1, CV_AA,0);

}

}

cvShowImage("dilate",img);

}

if(c=='s')

{

cvSaveImage("d:/img.bmp",img);

cvSaveImage("d:/img_binary.bmp",img_dilate);

}

n_cnt++;

}

cvDestroyAllWindows();

cvReleaseCapture(&capture);

cvReleaseImage(&img_gray1);

cvReleaseImage(&img_gray2);

cvReleaseImage(&img_gray3);

cvReleaseImage(&img_diff1);

cvReleaseImage(&img_diff2);

cvReleaseImage(&img_diff_and);

cvReleaseImage(&img_binary);

cvReleaseImage(&img_dilate);

cvReleaseMemStorage(&stor);

return 0;

}

下图是检测的运动目标二值化图像以及在实际图像中叠加的矩形框效果图。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2020-03-20

python图像差分法目标检测_OpenCV实现帧差法检测运动目标相关推荐

  1. matlab帧间差分法前景提取_matlab采用帧差法实现运动目标检测

    帧间差分法是一种通过对视频图像序列中相邻两帧作差分运算来获得运动目标轮廓的方法,它可以很好地适用于存在多个运动目标和摄像机移动的情况.当监控场景中出现异常物体运动时,帧与帧之间会出现较为明显的差别,两 ...

  2. Python与OpenCV(一)——基于帧差法的运动目标检测程序分析

    OpenCV提供了强大的图像处理功能,与Python的结合堪称完美... 这一次,我们试一下用帧差法来完成对运动目标的检测与跟踪. 帧差法的原理是这样的:由于摄像机采集的视频序列具有连续性的特点,所以 ...

  3. python图像差分法目标检测_运动目标检测(2)—帧间差分法

    帧差法依据的原则是:当视频中存在移动物体的时候,相邻帧(或相邻三帧)之间在灰度上会有差别,求取两帧图像灰度差的绝对值,则静止的物体在差值图像上表现出来全是0,而移动物体特别是移动物体的轮廓处由于存在灰 ...

  4. 【目标追踪】三帧差法原理及实现

    三帧差法原理及实现 (一)帧差法原理及实现: (二)帧差法存在的问题: (三)三帧差法的原理: (四)三帧差法的实现代码: (五)视频中的目标追踪效果: 关注我的公众号: (一)帧差法原理及实现: 这 ...

  5. 相邻帧差法和三帧差法

    相邻帧差法和三帧差法 原文地址:https://blog.csdn.net/dcrmg/article/details/52234929 帧间差分法是通过对视频中相邻两帧图像做差分运算来标记运动物体的 ...

  6. 数字图像处理拓展题目——利用Matlab实现动态目标检测 二帧差法、ViBe法、高斯混合模型法,可应用于学生递东西行为检测

    1.二帧差法实现动态目标检测 先上效果图: 利用GUI界面显示出来效果图为: 实现流程 1.利用matlab中的VideoReader函数读取视频流. 2.帧差法:获得视频帧数,用for循环对图像每相 ...

  7. 【opencv】(11) 背景建模,帧差法、混合高斯模型,实战:行人检测,附python完整代码和数据集

    各位同学好,今天和大家分享一下opencv背景建模相关操作.主要介绍两种背景建模方法,帧差法和混合高斯模型. 案例简介:现有一份路口摄像机拍摄的行人流视频,通过背景建模方法,区分背景和前景,完成行人识 ...

  8. 利用python语言实现帧差法,python+opencv实现帧差法

    实验效果如下图: 需要的可以下载代码文件直接就可以运行看看效果哦. 帧差法实现运动目标检测

  9. 前景检测算法(三)--帧差法

     原文:http://www.cnblogs.com/tornadomeet/archive/2012/05/01/2477629.html 前景检测算法_2(帧差法1) 帧差法是背景减图法中的一 ...

  10. 目标检测:采用卡尔曼滤波、 帧差法 、三帧差法、 背景差分法、 meansift算法

    本程序主要包含五个算法 卡尔曼滤波. 帧差法 .三帧差法. 背景差分法. meansift算法的目标追踪跟进 并用Gui进行了系统的设计和更新 Mansift主要根据第一个数据的设计 得到目标框,然后 ...

最新文章

  1. openface 和openpose(pytorch)剪枝之路
  2. JDBC操作步骤及数据库连接操作
  3. java cache-control_详解浏览器Cache-Control缓存策略
  4. sci写作sci写作模板_2020年写作主题
  5. 学习ExtJS(九) fit布局
  6. .h文件、.inc文件、.lib文件的功能及三者之间的异同
  7. 圆锥曲线一些奇怪的例题模型
  8. unity3d 火焰燃烧
  9. Clion安装教程(Linux)
  10. Android蓝牙打印服务,Android 模拟蓝牙打印机
  11. MongoDB 日志管理
  12. Linux设备驱动-platform虚拟总线dya01
  13. LightningChart数据可视化工具图形控件教程24-Bands(数据带)
  14. ERROR: could not inset ‘edd‘
  15. linux下打包和解包、解压和压缩
  16. KEIL下写代码,怎样使{}括号回车时候自动对齐?
  17. Linux文件关联详解 linux 修改默认文件关联打开程序
  18. python打开文件匹配数据_python实现两个excel数据匹配,最终写入新的excel文件
  19. kinect能接到电脑上用吗_讓XBOX360 Kinect 也能在PC上使用
  20. Python开发双人对战乒乓球小游戏

热门文章

  1. 熊猫的python小课账号_校长,我要上车——python模拟登录熊猫TV
  2. Golang学习之路(一):Golang安装和配置
  3. JUnit5学习之一:基本操作
  4. 【Linux应用】udhcpc命令获取到ip后,但是没有生效(没有设置进去)
  5. udhcpc 的使用
  6. 6.STM32F407之HAL库——定时器中断
  7. c语言齿轮标准模数选择编程,齿轮参数术语计算模数选择
  8. JAVA循环嵌套 方法的定义与重载 数组 数组异常 练习
  9. CUDA的下载与安装
  10. BIM技术在工程成本管控中有哪些优势