1、Mat——>vector
Mat m; vectorp; p=Mat_ (m)
2、vector
vectorp; Mat m=Mat(p);
3、vector
vectorp1,p2,p3; vector > pp; pp.pushback(p1); pp.pushback(p2); pp.pushback(p3);
4、vector
vector二、Opencv实现Mat与vector互转 1、Mat与vector互转> p; Mat pm((int)p.size(), p[0].size(), CV_32FC3); for( int i = 0; i < (int)p.size(); i++ ) { Mat r = pm.row(i).reshape(3, pm.cols); Mat pm1(p[i]); pm1.copyTo(r); }
#include2、Mat与数组互转using namespace cv; using namespace std; template vector<_Tp> convertMat2Vector(const Mat &mat) { return (vector<_Tp>)(mat.reshape(1, 1));//通道数不变,按行转为一行 } template cv::Mat convertVector2Mat(vector<_Tp> v, int channels, int rows) { cv::Mat mat = cv::Mat(v);//将vector变成单列的mat cv::Mat dest = mat.reshape(channels, rows).clone();//PS:必须clone()一份,否则返回出错 return dest; } int main() { Mat srcDate=Mat(3,3,CV_32FC3,Scalar(2)); vector v = convertMat2Vector (srcDate); cv::Mat dest = convertVector2Mat (v, 3, 3);//把数据转为3通道,3行的Mat数据 cout << "dest=n" << dest << endl; system("pause"); waitKey(); return 0; }
使用Mat存储数据,并读取相应元素
Mat mean = (cv::Mat_(2, 1) << 0.4404, 0.3111); cout << "mean=" << mean << endl; float a = mean.at (0, 0); float b = mean.at (1, 0);
将数组内容传递给Mat
unsigned char cbuf[height][width]; cv::Mat img(height, width, CV_8UC1, (unsigned char*)cbuf);三、
pp和output的区别在于:pp是vector
#includeusing namespace std; using namespace cv; int main() { //定义3*1的矩阵m1、m2、m3 Mat m1 = Mat(3, 1, CV_32F, Scalar(1)); Mat m2 = Mat(3, 1, CV_32F, Scalar(2)); Mat m3 = Mat(3, 1, CV_32F, Scalar(3)); //把Mat数组转换成Point3f点 vector p1; p1 = Mat_ (m1); vector p2; p2 = Mat_ (m2); vector p3; p3 = Mat_ (m3); //把Point3f点放入pp中 vector > pp; pp.push_back(p1); pp.push_back(p2); pp.push_back(p3); cout << pp[0] << endl; //先把m1m2m3转换成Point3f然后存储在vector 中 vector output; output.push_back(Point3f(m1.at (0, 0))); output.push_back(Point3f(m2.at (0, 0))); output.push_back(Point3f(m3.at (0, 0))); cout << output << endl; }



