有时候难免会将Mat作为vector的元素类型,下面通过例子来说明当在pushback的时候该怎么注意。
请分别将代码中下面的两行语句注释来比对运行结果
images.push_back(img);
images.push_back(img.clone());
#include <opencv2/opencv.hpp>
#include <sstream>
using namespace cv;
using namespace std;
int main()
{
VideoCapture cap("Sample.avi");
if (!cap.isOpened())
{
cout << "Can't open input video file" << endl;
return -1;
}
Mat img;
vector<Mat> images;
int count = 0;
while (cap.read(img))
{
if (img.empty())
{
cout << "Stop" << endl;
break;
}
// 实验需要在这里通过count来限制只取100帧
if (count < 100)
{
// images.push_back(img);
images.push_back(img.clone());</span>
}
count++;
}
int n = 0;
vector<Mat>::iterator it = images.begin();
while (it != images.end())
{
Mat tmp = *it;
stringstream ss;
ss << n;
n++;
imwrite(ss.str() + ".jpg", tmp);
imshow("tmp", tmp);
it++;
waitKey(10);
}
return 0;
}
void push_back (const value_type& val);
void push_back (value_type&& val);
Mat(const Mat& m);
如果大家在以后用到vector<Mat>出现问题的时候,也不妨考虑一下类似的问题。