//混合高斯模型
#include <cv.h>
#include <highgui.h>
#include <opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
int main(){
VideoCapture video("video1.avi");
Mat frame,mask,thresholdImage, output;
video>>frame;
int frameNum=1;
BackgroundSubtractorMOG bgSubtractor(20,10,0.5,false);
while(true){
video>>frame;
++frameNum;
bgSubtractor(frame,mask,0.001);
imshow("mask",mask);
imshow("origin",frame);
Mat image = mask;
std::vector<std::vector<cv::Point> > contours ;
//获取轮廓不包括轮廓内的轮廓
cv::findContours(image , contours ,
RETR_EXTERNAL , CV_CHAIN_APPROX_NONE) ;
cv::Mat result(image.size() , CV_8U , cv::Scalar(0)) ;
cv::drawContours(result , contours ,
-1 , cv::Scalar(125) , 2) ;
//绘制轮廓的最小外结矩形
//int i = contours.size()-1;
//for(i;i>0;i--)
for(int i=0;i<contours.size();i++)
{
RotatedRect rect=minAreaRect(contours[i]); //绘制轮廓的最小外结矩形
Point2f P[4];
rect.points(P);
for(int j=0;j<=3;j++)
{
line(result,P[j],P[(j+1)%4],Scalar(255),2);
}
}
cv::imshow("resultImage" , result) ;
waitKey(20);
}
return 0;
}
opencv 绘制目标矩形
最新推荐文章于 2023-02-14 18:07:13 发布