나는 모션 감지에 OpenCV를 사용하고 있습니다. net에서 다음 코드를 얻었습니다.opencv를 사용하여 느리게 움직이는 객체 만 감지
cv::Mat frame;
cv::Mat back;
cv::Mat fore;
cv::VideoCapture cap(0);
bg.nmixtures = 3;
bg.bShadowDetection = false;
const int history = 5;
cv::BackgroundSubtractorMOG2 bg (history,nmixtures,bShadowDetection);
std::vector<std::vector<cv::Point> > contours;
cv::namedWindow("Frame");
cv::namedWindow("Background");
for(;;)
{
cap >> frame;
bg.operator()(frame,fore);
bg.getBackgroundImage(back);
cv::erode(fore,fore,cv::Mat());
cv::dilate(fore,fore,cv::Mat());
cv::findContours(fore,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);
cv::drawContours(frame,contours,-1,cv::Scalar(0,0,255),2);
cv::imshow("Frame",frame);
cv::imshow("Background",back);
if(cv::waitKey(30) >= 0) break;
}
그렇다면 임계 값을 설정하여 새 프레임과 이전 프레임의 변경이 임계 값을 초과하면 아무것도 수행하지 마십시오. 아니면 천천히 움직이는 물체를 캡처하는 제 상황에 맞는 다른 알고리즘 일 수도 있습니다.
실제로 시도했지만,이 경우에는 느리고 빠르게 움직입니다. – user2588495
두 개의 임계 값을 계산하여 두 임계 값을 빼면이 경우 느린 값에 대해서만 모션을 얻을 수 있습니다. – Bharat