I would think this is trivial, but I have problems with that.
I want to read a video file in memory and store it in an array. I want the array to have pointers to Mat objects.
This is the code I'm using:
cv::VideoCapture vidCap = cv::VideoCapture("file.avi"); int frames = (int)vidCap.get(CV_CAP_PROP_FRAME_COUNT); cv::Mat** frameArray = new cv::Mat*[frames]; for (int num = 0; num < frames; num++) { frameArray[num] = new cv::Mat; vidCap >> *(frameArray[num]); }
However, when I display an image (for example, the first image in an array), it displays the last frame. Where am I going wrong? This is the code to display the image:
cv::namedWindow("Movie", 1); cv::imshow("Movie", *(frameArray[0])); cv::waitKey(0);
I would suggest that since it displays the last image, all the pointers in the array are the same, and therefore it modifies the same memory. However, when I print pointers, they are different.
Thanks in advance for your help.
source share