我创建了矢量矢量来存储cv :: Mat(framecollection)。我的计划是将视频的每一帧分割成N * N块并存储。但是在我运行代码时,它只存储了framecollection的每个位置的最后一帧。我不知道代码有什么问题。
int nframes=(int)capture.get(CV_CAP_PROP_FRAME_COUNT);
int frame_row=capture.get(CV_CAP_PROP_FRAME_HEIGHT);
int frame_cols=capture.get(CV_CAP_PROP_FRAME_WIDTH);
int X=ceil(frame_row/(double)N);//rows
int Y=ceil(frame_cols/(double)N);//cols
std::vector<std::vector<Mat> > framecollection(nframes, std::vector<Mat> (X*Y));
//std::array< std::vector<Mat>, nframes > framecollection;
int f=0;
for( ; ; )
{
capture >> frame;
if(frame.empty())
break;
vector<Mat> blocks;
for (int r = 0; r < frame_row; r += N)
{
for (int c = 0; c < frame_cols; c += N)
{
Mat tile = frame(Range(r, min(r + N, frame_row)),Range(c, min(c + N, frame_cols)));
blocks.push_back(tile);
}
}
framecollection[f]=blocks;
f++;
}
// framecollection仅提供每个位置的最后一帧