블롭 (findcontours)에서 사람이나 보행자를 감지하는 방법을 묻고 싶습니다. 어떻게 이런 findcontours()를 사용하여 프레임에있는 객체의 검출에 배우려고했습니다인간 모양을 기반으로 인간이 findcontours를 사용하여 어떻게 탐지합니까?
#include"stdafx.h"
#include<vector>
#include<iostream>
#include<opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
int main(int argc, char *argv[])
{
cv::Mat frame;
cv::Mat fg;
cv::Mat blurred;
cv::Mat thresholded;
cv::Mat thresholded2;
cv::Mat result;
cv::Mat bgmodel;
cv::namedWindow("Frame");
cv::namedWindow("Background Model"
//,CV_WINDOW_NORMAL
);
//cv::resizeWindow("Background Model",400,300);
cv::namedWindow("Blob"
//,CV_WINDOW_NORMAL
);
//cv::resizeWindow("Blob",400,300);
cv::VideoCapture cap("campus3.avi");
cv::BackgroundSubtractorMOG2 bgs;
bgs.nmixtures = 3;
bgs.history = 1000;
bgs.varThresholdGen = 15;
bgs.bShadowDetection = true;
bgs.nShadowDetection = 0;
bgs.fTau = 0.5;
std::vector<std::vector<cv::Point>> contours;
for(;;)
{
cap >> frame;
cv::GaussianBlur(frame,blurred,cv::Size(3,3),0,0,cv::BORDER_DEFAULT);
bgs.operator()(blurred,fg);
bgs.getBackgroundImage(bgmodel);
cv::threshold(fg,thresholded,70.0f,255,CV_THRESH_BINARY);
cv::threshold(fg,thresholded2,70.0f,255,CV_THRESH_BINARY);
cv::Mat elementCLOSE(5,5,CV_8U,cv::Scalar(1));
cv::morphologyEx(thresholded,thresholded,cv::MORPH_CLOSE,elementCLOSE);
cv::morphologyEx(thresholded2,thresholded2,cv::MORPH_CLOSE,elementCLOSE);
cv::findContours(thresholded,contours,CV_RETR_CCOMP,CV_CHAIN_APPROX_SIMPLE);
cv::cvtColor(thresholded2,result,CV_GRAY2RGB);
int cmin = 50;
int cmax = 1000;
std::vector<std::vector<cv::Point>>::iterator itc=contours.begin();
while (itc!=contours.end()) {
if (itc->size() > cmin && itc->size() < cmax){
std::vector<cv::Point> pts = *itc;
cv::Mat pointsMatrix = cv::Mat(pts);
cv::Scalar color(0, 255, 0);
cv::Rect r0= cv::boundingRect(pointsMatrix);
cv::rectangle(frame,r0,color,2);
++itc;
}else{++itc;}
}
cv::imshow("Frame",frame);
cv::imshow("Background Model",bgmodel);
cv::imshow("Blob",result);
if(cv::waitKey(30) >= 0) break;
}
return 0;
}
을 지금은 인간을 감지하는 방법을 알고 싶어? 나는 돼지를 사용해야합니까? 또는 haar? 예, 사용하려면 어떻게 사용해야합니까? 어떤 자습서를 사용하는 방법을 배울 수 있습니까? 왜냐하면 나는 너무 궁금해서! OpenCV를 배울 때 너무 재미 있습니다! 그래서 중독성! :))
어쨌든 여기서 도움을 주시면 감사하겠습니다. :)
예, 모든 프레임에서 호이 (HoG)를 사용하십시오. 또는 [분류 자] (http://docs.opencv.org/doc/tutorials/objdetect/cascade_classifier/cascade_classifier.html)를 사용해보십시오. – William
head + upperbody + lowebody에 대한 xml 분류 자 생성 방법은 무엇입니까? 그것에 관한 튜토리얼이 있습니까? – Shabanzo
그들은 주어진다. OpenCV245/opencv/data/haarcascades를 체크인하십시오. – William