【OpenCV】std::vector<cv::Mat>
来源:互联网 发布:老鼠走迷宫算法 编辑:程序博客网 时间:2024/06/06 08:38
制作模板图过程中用vector保存模板图,调试了一中午终于发现错误的地方,非常狗血,提醒大家以后注意使用
std::vector<cv::Mat>
方法一:
方法二:std::vector<cv::Mat> template_img;template_img.push_back(img);
std::vector<cv::Mat> template_img;template_img.push_back(img.clone());
完整代码:
#include <iostream>#include <cv.h>#include <opencv2/highgui/highgui.hpp>#include <opencv2/core/core.hpp>#include <opencv2/imgproc/imgproc.hpp>#include<string.h>#include <Windows.h>using namespace cv;using namespace std;bool GetImgNameFromFile(const char *filename, vector<string> &imgpath){WIN32_FIND_DATAA imgdata;HANDLE hFind;hFind = FindFirstFileA((LPCSTR)filename, &imgdata);//如果该目录下没有图片;if (hFind == INVALID_HANDLE_VALUE){printf("Invalid File Handle. GetLastError reports %d\n", GetLastError());return false;}do{imgpath.push_back(imgdata.cFileName);} while (FindNextFileA(hFind, &imgdata));FindClose(hFind);//关闭句柄,释放资源;return true;}void characterDB(std::vector<cv::Mat> &template_img){template_img.clear();Mat img;Mat img_resize;string template_root_path = "F:\\vs\\show\\Template\\";string template_num_path[8] = { "0.jpg", "1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg", "6.jpg"};string foldername = "F:\\vs\\show\\Template\\number\\";string temp = foldername + string("*.jpg");const char *filename = temp.c_str();vector<string> imgpath;GetImgNameFromFile(filename, imgpath);for (std::size_t i = 0; i < imgpath.size(); i++){string path = foldername + imgpath[i];Mat img = imread(path, 1);// 读取原图template_img.push_back(img.clone());// 添加元素 方式一//template_img.push_back(img);// 添加元素 方式二string template_path = template_root_path + template_num_path[i];cv::imwrite(template_path, img);//保存模板}return;}void main(){std::vector<cv::Mat> template_img;characterDB(template_img);cv::imshow("0", template_img[0]);cv::imshow("1", template_img[1]);cv::imshow("2", template_img[2]);cv::imshow("3", template_img[3]);cv::imshow("4", template_img[4]);cv::imshow("5", template_img[5]);cv::imshow("6", template_img[6]);cv::waitKey();}
区别:方法二vector中的元素添加正确
分析:出现这样问题的原因,可以查看vector的push_back()函数及Mat的copy constructor
完整工程: 链接:http://pan.baidu.com/s/1boBhy2N 密码:t1hp
reference:http://blog.csdn.net/yiyuehuan/article/details/44656723
0 0
- 【OpenCV】std::vector<cv::Mat>
- cv::Mat和std::vector的相互转化
- OpenCV笔记(cv::Mat)
- OpenCv cv::Mat用法
- OpenCv IplImage 转 cv::Mat
- matlab to opencv(CV::Mat)
- OpenCv cv::Mat类用法
- opencv cv::Mat的用法
- [OpenCV] cv::Mat to IplImage*
- 【OpenCV】vector<Mat>
- opencv Mat存储在std::vector 时要注意的问题
- 如何访问opencv中cv::Mat
- 【OpenCV】cv::Mat与IplImage类型转换
- OpenCv cv::Mat类用法1
- opencv c++接口 cv::Mat使用
- OpenCV - cv::Mat 和 IplImage 的转换
- OpenCv cv::Mat 转 IplImage 函数
- OpenCv cv::Mat类用法1
- BZOJ 2292: 【POJ Challenge 】永远挑战 最短路 dijkstra+heap
- JDK、JRE、JVM三者间的关系
- Javascript设置广告和时间表和数组的学习
- Android 调用百度地图API
- 小小的、奇怪的sql查询语句
- 【OpenCV】std::vector<cv::Mat>
- java内存
- 共享jQuery/Eclipse/SVN/PS/DW/的API文档
- LeetCode 278. First Bad Version
- 找回oracle中删除的数据
- 拆箱与装箱
- MYSQL中约束及修改数据表
- 在Linux虚拟机下配置tomcat
- Windows server 2008 企业版 Sqlserver2008标准版在IBM X3650上实现双机热备4