Я работаю над проектом по распознаванию движений с участием openCV и C ++.Я достиг стадии в алгоритме, где я должен найти область человеческого сгустка.Я загрузил видео, преобразовал его в оттенки серого и установил порог, чтобы получить двоичное изображение с белыми областями, показывающими ходьбу человека в дополнение к другим белым областям.Мне нужно найти площадь каждой белой области, чтобы определить область человеческой сгустка, так как эта область будет иметь площадь больше, чем у других белых областей.Пожалуйста, просмотрите мой код и объясните мне вывод, потому что я получаю область 40872, и я не знаю, что это значит.Это мой кодЯ хочу загрузить видео, которое я использовал, но я не знаю, как: / Если кто-то может сказать мне, как загрузить видео, которое я использовал, пожалуйста, сделайте это, потому что это единственный способ, которым я смогу получить помощь с этим конкретным видео,Я действительно надеюсь, что кто-то может мне помочь.
#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;
}