基于OpenCV C++垃圾分类项目的代码详解(工训总结)——摄像头动态检测物品并取图像
首先,分三步走:功能、代码、解释。
一、功能:**本段代码实现的主要是当垃圾进入投放口后,垃圾物品稳定后(垃圾不再动了)进行拍照,在没有垃圾进入视野时循环播放垃圾宣传片(AVI格式)。
核心:基于物体的运动检测,设置了两个全局变量,第一个用于检测垃圾是否进入视野,第二个用于检测垃圾进入视野后是否稳定,当稳定后延时一个较短的时间后将此刻图像帧保存到指定位置。
二、代码:
imageDetection.h文件
#ifndef __imageDtection__H
#define __imageDtection__H
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
//#include <opencv/highgui.h>
#include <iostream>
using namespace std;
using namespace cv;
Mat MoveDetect(Mat temp, Mat frame);
#endif
imageDetection.cpp文件
//#include <opencv/cv.h>
#include "imageDetection.h"
int haveNewMove = 0; //判断垃圾是否进入摄像头的范围,视野内有物体移动时置1
int afterHaveNewMove = 0;//判断垃圾进入视野后是否稳定不在移动,不移动时置1
int main()
{
VideoCapture vide1("1.avi"); //播放垃圾宣传片的视频类
if (!vide1.isOpened())
{
cout << "1.avi not open" << endl;
return -1;
}
double rate = vide1.get(CV_CAP_PROP_FPS);//帧率
Size vide1Size = Size