Fraol Gelana Ответов: 1

Как нарисовать ограничивающую рамку вокруг человека


Я начинаю изучать OpenCV для проекта в колледже. Я работал над кодом, который выполняет простое вычитание фона видеофайла с помощью метода разности кадров, что мне удалось, но я хотел нарисовать ограничивающую рамку вокруг человека, движущегося на вычитаемом изображении.

Что я уже пробовал:

#include"opencv2\imgproc.hpp"
#include"opencv2\highgui.hpp"
#include"opencv2\video.hpp"
#include"opencv\cv.h"
#include<vector>
#include<stdint.h>
#include<iostream>

using namespace cv;
using namespace std;

Mat currentframe;
Mat prevframe, difframe;
vector<vector<point> > contours;
vector<vec4i> hierarchy;
int area = 0;
int idx = 5;
Rect rect;

int main(int argc, char* argv[]) {

	//Capture Video
	VideoCapture cap("1.mp4");
	if (!cap.isOpened()) {
		cerr << "Unable to open file" << endl;
		return -1;
	}

	

	//namedWindow("Input_Seq", 1);

	namedWindow("Frame Difference", 1);


	while (1) {
		cap >> currentframe;

		if (currentframe.empty())
			break;
		cvtColor(currentframe, currentframe, CV_BGR2GRAY);

		cap >> prevframe;

		if (prevframe.empty())
			break;
		cvtColor(prevframe, prevframe, CV_BGR2GRAY);

		absdiff(currentframe, prevframe, difframe);
		

		//GaussianBlur(difframe, difframe, Size(3, 3), 0, 1, BORDER_DEFAULT);
		Canny(difframe, difframe, 30, 100, 3);
		findContours(difframe, contours, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));

		
		

		imshow("Input_Seq", currentframe);
		imshow("Frame Difference", difframe);
		char c = (char)waitKey(25);
		if (c == 27)
			break;
	}
	cap.release();
	destroyAllWindows();
	return 0;
}

1 Ответов

Рейтинг:
4

Afzaal Ahmad Zeeshan

Есть несколько вещей, которые вы не используете. rect объект где угодно. Почему? Разве это не должно захватить коробку, ограничивающую найденного человека? Прямая линия, которую вы обнаружите, будет использоваться для визуализации коробки вокруг человека.

Я написал статью, посвященную этому аспекту, но я работал с лицами. Поэтому, обнаружив этот факт, я взял область этого лица и нарисовал прямоугольник с предоставленными значениями X Y. Вы можете сделать то же самое и в этом случае, подробнее об этом читайте в статье, Выделение лиц на загруженном изображении в ASP.NET веб-приложения[^].