Я пытаюсь написать программу, которая захватывает n кадров из видео и помещает их в контейнер для дальнейшей работы (впоследствии я делаю коллаж). Но я столкнулся с проблемой, когда все изображения в контейнере одинаковы (они заполняются только последним захваченным изображением). Я проверил, что изображения захвачены правильно, так как я их также сохраняю и могу очистить, увидев, что они разные.OpenCV, помещая одно и то же изображение в контейнер
Вот мой код:
std::vector<cv::Mat> MY_framelist; //container for captured frames
cv::VideoCapture myvid;
cv::Mat MY_frame; //will capture frames here
myvid.open(pass_filename); //open video file(char* pass_filename=12.mp4)
if (!myvid.isOpened()) {
printf("Capture not open \n");
}
double x_length = myvid.get(CV_CAP_PROP_FRAME_COUNT); //get maxlength of the video
uint each_frame = uint(x_length)/16; //capture every 16 frames
for (uint j = 0, current_frame = 1; (current_frame < x_length) && (j < 16); current_frame += each_frame, j++)
{
myvid.set(CV_CAP_PROP_POS_FRAMES, current_frame); //set frame
myvid.read(MY_frame); // then capture the next one
MY_framelist.push_back(MY_frame); //place it into the container
std::stringstream frameNum; //generating name for saved images
frameNum << j + 1;
if (j + 1 <= 9)
my_filename += "0";
my_filename += frameNum.str();
my_filename += ".jpg";
cv::imwrite(my_filename.c_str(), MY_frame); //saving images to prove that they are captured correctly
my_filename = "test";
printf(" and Image # ");
printf("%d", j + 1);
printf(" saved \n");
}
В результате MY_framelist будет содержать 16 те же изображения, которые были захвачены в прошлом. Что я делаю неправильно here? Я видел здесь несколько рабочих мест, но я не очень хочу это сделать, поскольку это приведет к не столь точным результатам. Спасибо заранее!
Может быть, что 'резюме :: Mat' был манипулятором и только то, что обработчик копируется в вектор? – perencia