Метод разности кадров [вычитание фона]
Я пытаюсь реализовать метод разности кадров для выполнения вычитания фона. Проблема в том, когда я пытаюсь показать разницу кадров в окне. Я не получаю никакого вывода [черное окно]. Это код реализован
#include <highgui.h>
#include <iostream>
using namespace cv;
int main()
{
VideoCapture cap("Camouflage/b%05d.bmp");
if(!cap.isOpened())
{
std::cout<<"failed to open image sequence";
return 1;
}
char c;
Mat frame1, frame2, frame3;
namedWindow("Original Frames",1);
namedWindow("Frame Difference",1);
while(1)
{
cap>>frame1;
if(frame1.empty())
{
std::cout<<"Frame1Message->End of sequence"<<std::endl;
break;
}
cap>>frame2;
if(frame2.empty())
{
std::cout<<"Frame2Message->End of sequence"<<std::endl;
break;
}
// absdiff(frame1,frame2,frame3);
frame3=frame1.clone();
frame3=frame3-frame2;
//imwrite("C:/Users/hp/Desktop/file
imshow("Frame Difference",frame3);
c=waitKey(90);
if(c==27)
break;
imshow("Original Frames",frame1);
c=waitKey(90);
if(c==27)
break;
}
}
кто-нибудь может мне помочь?.. я застрял.
ОБНОВИТЬ
VideoCapture
не работал для меня, поэтому я использовал cvCapture
Я думал, что это не будет читать последовательность изображений, но это сработало. Это то, что я сделал
CvCapture* capture = cvCreateFileCapture("Camouflage/b%05d.bmp");
Имя изображения может быть любым, например, b00000, b00010, b00001 и т. Д.
1 ответ
Вы открываете файл bmp с помощью VideoCapture. Попробуйте видео, но захват 2 кадров без задержки между ними может вызвать некоторые проблемы.