OpenCV 之Mat::push_back()
来源:互联网 发布:金融seo是什么意思 编辑:程序博客网 时间:2024/06/06 13:07
OpenCV的数据结构Mat是相当强大的,Mat的push_back()
template<typename _Tp> inline void Mat::push_back(const _Tp& elem){ if( !data ) { *this = Mat(1, 1, DataType<_Tp>::type, (void*)&elem).clone(); return; } CV_Assert(DataType<_Tp>::type == type() && cols == 1 /* && dims == 2 (cols == 1 implies dims == 2) */); uchar* tmp = dataend + step[0]; if( !isSubmatrix() && isContinuous() && tmp <= datalimit ) { *(_Tp*)(data + (size.p[0]++)*step.p[0]) = elem; dataend = tmp; } else push_back_(&elem);}template<typename _Tp> inline void Mat::push_back(const Mat_<_Tp>& m){ push_back((const Mat&)m);}
从上面可以看出,当dig.push_back()的参数是Mat small的时候,会把这个small的数据排成一行放到dig中,在这之前先reshape().这样就可以作为一个Mat的虚拟的vector来使用。注意,这个功能必须要求isContinues(),即small的数据必须是在内存中连续存放的。
一下是一个使用的例子
// Main entry code OpenCV#include <cv.h>#include <highgui.h>#include <cvaux.h>#include <iostream>#include <vector>using namespace std;using namespace cv;int main ( int argc, char** argv ){ cout << "OpenCV Training SVM Automatic Number Plate Recognition\n"; cout << "\n"; char* path_Plates; char* path_NoPlates; int numPlates; int numNoPlates; int imageWidth=144; int imageHeight=33; //Check if user specify image to process if(argc >= 5 ) { numPlates= atoi(argv[1]); numNoPlates= atoi(argv[2]); path_Plates= argv[3]; path_NoPlates= argv[4]; }else{ cout << "Usage:\n" << argv[0] << " <num Plate Files> <num Non Plate Files> <path to plate folder files> <path to non plate files> \n"; return 0; } Mat classes;//(numPlates+numNoPlates, 1, CV_32FC1); Mat trainingData;//(numPlates+numNoPlates, imageWidth*imageHeight, CV_32FC1 ); Mat trainingImages; vector<int> trainingLabels; for(int i=0; i< numPlates; i++) { stringstream ss(stringstream::in | stringstream::out); ss << path_Plates << i << ".jpg"; Mat img=imread(ss.str(), 0); img= img.reshape(1, 1); trainingImages.push_back(img); trainingLabels.push_back(1); } for(int i=0; i< numNoPlates; i++) { stringstream ss(stringstream::in | stringstream::out); ss << path_NoPlates << i << ".jpg"; Mat img=imread(ss.str(), 0); img= img.reshape(1, 1); trainingImages.push_back(img); trainingLabels.push_back(0); } Mat(trainingImages).copyTo(trainingData); //trainingData = trainingData.reshape(1,trainingData.rows); trainingData.convertTo(trainingData, CV_32FC1); Mat(trainingLabels).copyTo(classes); FileStorage fs("SVM.xml", FileStorage::WRITE); fs << "TrainingData" << trainingData; fs << "classes" << classes; fs.release(); return 0;}
- OpenCV 之Mat::push_back()
- opencv中mat的push_back。
- 2.opencv之mat
- OpenCV之Mat
- opencv之Mat
- opencv之Mat类
- OpenCV数据结构之Mat
- OpenCV入门之:Mat
- OpenCV之Mat类
- OpenCV数据结构之Mat
- Opencv之Mat类
- OPenCV之Mat
- OpenCV数据结构之Mat
- OpenCV之Mat
- Opencv之mat介绍
- 【opencv】 opencv之Mat详解
- 【opencv】opencv之Mat属性
- openCV之Mat类解读
- Davinci DM6446 Linux 内核分析——io.c
- 遇到的问题
- ORA-00845: MEMORY_TARGET not supported on this system
- 694 - The Collatz Sequence
- 每天学点jQuery(六)
- OpenCV 之Mat::push_back()
- 我的第一个MASM32程序(MASM32环境配置)
- 重写onTouchEvent方法响应触摸屏事件
- [数字信号处理]IIR滤波器的直接设计(C代码)
- ASP.NET 表达式和表达式生成器
- 简明 Python 教程
- java实现读写Excel数据
- poj3415 Common Substrings,后缀数组、单调栈
- Tomcat 无法正常卸载