opencv-视频处理--画线(越线、拌线)
来源:互联网 发布:aimer在日本火吗 知乎 编辑:程序博客网 时间:2024/05/16 00:48
视频处理中,经常有做一些行人、车辆或者其它运动物体越线检测,越界检测。
原视频流:
下面用opencv介绍两种方式,画直线(越线、拌线):
第一种:固定第一帧,或者暂停视频,在固定的一帧中完成画直线的功能
#include<iostream>using namespace std;#include<opencv2\core\core.hpp>#include<opencv2\highgui\highgui.hpp>#include<opencv2\imgproc\imgproc.hpp>using namespace cv;/*--------------------------------定义鼠标事件--画直线--------------------------*/bool got_line = false;//全局变量Point beginPoint=Point(0,0);//--注意这个有一个初始化的(0,0)bool got_beigin_point = false;Point endPoint=Point(0,0);//--注意这个有一个自己默认的初始化(0,0)void mouseLineHandler(int event, int x, int y, int flags, void *param){switch(event){case CV_EVENT_LBUTTONDOWN:beginPoint = Point(x,y);endPoint = beginPoint;got_beigin_point = true;break;case CV_EVENT_MOUSEMOVE:if(got_beigin_point){endPoint = Point(x,y);}break;case CV_EVENT_LBUTTONUP:got_line = true;endPoint = Point(x,y);break;default:break;}}/*---------------------------------------------------------------------------------------------*/ int main(int argc,char*argv[]) { //读取视频 VideoCapture video(argv[1]); //判断视频是否打开 if( !video.isOpened()) return 0; //视频中的第一帧 Mat firstFrame; Mat frame; //读取视频的第一帧 video>>frame; //复制到firstFrame中 frame.copyTo(firstFrame); //register namedWindow("video",1); setMouseCallback("video",mouseLineHandler,NULL); //画线 while(!got_line) { firstFrame.copyTo(frame); line(frame,beginPoint,endPoint,Scalar(255,0,0),2); imshow("video",frame); if(waitKey(50) == 'q')//---------很重要 break; } //remove callback setMouseCallback("video",NULL,NULL); //视频继续 for(;;) { video>>frame; line(frame,beginPoint,endPoint,Scalar(255,255,0),2); imshow("video",frame); if(waitKey(33) == 'q') break; } return 0; } /*-----------------------------------------------------------------*/【结果】:最好亲手试一下,才能看出区别
第二种:不影响视频播放的情况下,完成画直线的功能
#include<iostream>using namespace std;#include<opencv2\core\core.hpp>#include<opencv2\highgui\highgui.hpp>#include<opencv2\imgproc\imgproc.hpp>using namespace cv;/*--------------------------------定义鼠标事件--画直线--------------------------*/bool got_line = false;//全局变量Point beginPoint=Point(0,0);//--注意这个有一个初始化的(0,0)bool got_beigin_point = false;Point endPoint=Point(0,0);//--注意这个有一个自己默认的初始化(0,0)void mouseLineHandler(int event, int x, int y, int flags, void *param){switch(event){case CV_EVENT_LBUTTONDOWN:beginPoint = Point(x,y);endPoint = beginPoint;got_beigin_point = true;break;case CV_EVENT_MOUSEMOVE:if(got_beigin_point){endPoint = Point(x,y);}break;case CV_EVENT_LBUTTONUP:got_line = true;endPoint = Point(x,y);break;default:break;}}/*---------------------------------------------------------------------------------------------*/ int main(int argc,char*argv[]) { //读取视频 VideoCapture video(argv[1]); //判断视频是否打开 if( !video.isOpened()) return 0; //视频帧 Mat frame; //register namedWindow("video",1); setMouseCallback("video",mouseLineHandler,NULL); //画直线 for(;;) { video>>frame; line(frame,beginPoint,endPoint,Scalar(0,255,255),2); imshow("video",frame); if(got_line) break; if(waitKey(50)=='q') break; } //remove callback setMouseCallback("video",NULL,NULL); //视频继续 for(;;) { video>>frame; line(frame,beginPoint,endPoint,Scalar(0,255,255),2); imshow("video",frame); if(waitKey(33) == 'q') break; } return 0; } /*-----------------------------------------------------------------*/【结果】:
根据这一篇得到了视频中的直线,然后再根据前景检测,就可以得到运动物体的越线检测,拌线检测
1 0
- opencv-视频处理--画线(越线、拌线)
- opencv---视频处理--拌线检测(越线检测)
- opencv---视频处理--拌线检测(越线检测)
- Python-OpenCV 处理视频(二): 视频处理
- Python-OpenCV 处理视频(一)(二): 输入输出 视频处理
- Python-OpenCV 处理视频(一): 输入输出
- opencv(二)对视频的处理
- opencv视频处理范例
- OpenCv视频处理函数
- opencv视频处理整理
- OpenCv视频处理函数
- openCv视频处理
- openCV中的视频处理。。。
- OpenCV视频处理
- OpenCV 视频处理框架
- 用OpenCV处理视频
- OpenCV视频的处理
- opencv 视频处理
- iOS之UIImageView的contentMode详解
- 1.1 深度学习 基本概念
- android启动过程及各个镜像间的关系
- HUD 2037 今年暑假不AC
- application/xml and text/xml的区别
- opencv-视频处理--画线(越线、拌线)
- 交流
- Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #17: invalid drawable tag vec
- [e袋购]如何做好物业服务
- java继承和组合
- iOS开发之静态库的生成、静态库的合并、静态库使用
- 【算法设计与分析】输油管道问题
- oracle 12c:新特性-网格(Grid)基础架构的增强
- poi之excel导出(不需要合并单元格)