1
저는 카메라 피드를 입력으로 사용하고 정적 배경을 가진 비디오 처리 프로젝트를 진행하고 있습니다. opencv의 BackgroundSubtractorMOG처럼 동적 인 백그라운드 생성을 필요로하지 않습니다. 경계 상자 안에 전경 개체를 바인딩하려고합니다. 그래서 그게 내가 한 일이다.비디오 스트림에서 전경 추출하기
cv::absdiff(back_frame,matProcessed,temp); //back_frame is the background matProcessed is the frame from CAMERA in grayscale
cv::threshold(temp,temp,20,255,THRESH_BINARY);
cv::findContours(temp,contours,CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
std::vector<Rect> boundRect(contours.size());
std::vector< std::vector<Point> > contours_poly(contours.size());
int j=0;
for(int i = 0; i < contours.size(); i++)
{
if(contourArea(contours[i])>100)
{
approxPolyDP(Mat(contours[i]), contours_poly[i], 10, true);
boundRect[j] = boundingRect(Mat(contours_poly[i]));
j++;
}
}
cv::rect r;
for (int i = 0; i < boundRect.size(); i++)
{
r = boundRect[i];
cv::rectangle(
frame,
cv::Point(r.x, r.y),
cv::Point(r.x + r.width, r.y + r.height),
CV_RGB(0,255,0)
);
}
그러나 문제는 전경이 올바르게 나오지 않는다는 것이다. 어쨌든 전경 생성을 향상시킬 수 있고 배경 복잡성 및 기타 요인에 관계없이 사각형 경계 상자를 사용하여 전경 개체를 항상 바인딩합니까 ??