vector与mat互转
参考1、
一、Mat转vector
1、生成1xN的vector对象
1)Mat对象直接转换成vector对象
(1)主要是将Mat对象转换为单通道、单行的Mat对象!然后就可以直接转换成vector对象
Mat src = imread("a.jpg");
// 通用转换
vector<int> v = src.reshape(1, 1)
// 如果src是单通道
vector<int> v = src.reshape(0, 1)
2)获取Mat对象的单列
vector<int> c = src.col(0).reshape(1)
2、生成3xN的vector对象
vector<vector<float>> mat2vec(Mat img, cv::Size2d size = { 512, 512 })
{
	resize(img, img, size);
	cvtColor(img, img, cv::COLOR_BGR2RGB);
	img.convertTo(img, CV_32FC3);
	img = img / 255.0;
	vector<Mat> mv;
	// 三通道分开处理
	split(img, mv);
	vector<float> R = mv[0].reshape(1, 1);
	vector<float> G = mv[1].reshape(1, 1);
	vector<float> B = mv[2].reshape(1, 1);
	// R、G、B三通道数据合并
	vector<vector<float>> outData;
	outData.emplace_back(vector<float>(R.begin(), R.end()));
	outData.emplace_back(vector<float>(G.begin(), G.end()));
	outData.emplace_back(vector<float>(B.begin(), B.end()));
	return outData;
}
二、vector转mat
1、1xN的vector对象转单通道Mat对象
// 直接用vector对象构造Mat对象
vector<float> input({1,2,3});
Mat m = Mat(input);
2、类型float的vector对象转三通道Mat对象
bool vec2mat(vector<vector<float>>& input, Mat& output)
{
	if (input.size() != 3) {
		return false;
	}
	Mat r = Mat(input[0]);
	Mat g = Mat(input[1]);
	Mat b = Mat(input[2]);
	vector<Mat> bgr{ b,g,r };
	merge(bgr, output);
	return true;
}
                    
                
                
            
        
浙公网安备 33010602011771号