openCV 및 C++와 관련된 걷기 동작 인식 프로젝트를 진행 중입니다. 나는 인간 BLOB 영역을 찾는 데 필요한 알고리즘에서 무대에 도달했습니다. 비디오를로드하고 회색 음영으로 변환 한 후 다른 흰색 영역 이외에 인간의 보행을 나타내는 흰색 영역이있는 이진 이미지를 얻기 위해 임계 값을 설정했습니다. 이 영역은 다른 백색 영역보다 큰 영역을 가질 것이기 때문에 각 백색 영역의 영역을 찾아서 인간 블로 브의 영역을 결정해야합니다. 내 코드를 살펴보고 40872의 면적을 얻고 있기 때문에 출력이 나에게 무엇인지 알 수 없으므로 출력을 설명하십시오. 이것은 내 코드입니다. 내가 사용했던 비디오를 업로드하고 싶지만 어떻게해야할지 모르겠다./내가 사용했던 비디오를 업로드하는 법을 누군가에게 말해 줄 수 있다면,이 방법을 사용하면된다. 왜냐하면이 특정 비디오에 도움을 줄 수있는 유일한 방법이기 때문이다. . 누군가가 나를 도울 수 있기를 바랍니다.cvMoments를 사용하는 객체 영역
#include "cv.h"
#include "highgui.h"
#include "iostream"
using namespace std;
int main(int argc, char* argv) {
CvCapture *capture = NULL;
capture = cvCaptureFromAVI("C:\\walking\\lady walking.avi");
if(!capture){
return -1;
}
IplImage* color_frame = NULL;
IplImage* gray_frame = NULL ;
int thresh_frame = 70;
CvMoments moments;
int frameCount=0;//Counts every 5 frames
cvNamedWindow("walking", CV_WINDOW_AUTOSIZE);
while(1) {
color_frame = cvQueryFrame(capture);//Grabs the frame from a file
if(!color_frame) break;
gray_frame = cvCreateImage(cvSize(color_frame->width, color_frame->height), color_frame->depth, 1);
if(!color_frame) break;// If the frame does not exist, quit the loop
frameCount++;
if(frameCount==5)
{
cvCvtColor(color_frame, gray_frame, CV_BGR2GRAY);
cvThreshold(gray_frame, gray_frame, thresh_frame, 255, CV_THRESH_BINARY);
cvErode(gray_frame, gray_frame, NULL, 1);
cvDilate(gray_frame, gray_frame, NULL, 1);
cvMoments(gray_frame, &moments, 1);
double m00;
m00 = cvGetSpatialMoment(&moments, 0,0);
cvShowImage("walking", gray_frame);
frameCount=0;
}
char c = cvWaitKey(33);
if(c == 27) break;
}
double m00 = (double)cvGetSpatialMoment(&moments, 0,0);
cout << "Area - : " << m00 << endl;
cvReleaseImage(&color_frame);
cvReleaseImage(&gray_frame);
cvReleaseCapture(&capture);
cvDestroyWindow("walking");
return 0;
}