cv::FileStorage 读写多通道cv::Mat (存储为YAML文件 )

由于 cv::FileStorage读取cv::Mat 存在通道数的上限,因此对多于4个通道的Mat输出为YAML存储时,需要进行Reshape,具体如下:

写出多通道的Mat到YAML文件

cv::Mat fdstMat = cv::Mat::zeros(cv::Size(dst_w, dst_h), CV_32FC(nBandNum));  //nBandNum)>4
cv::Mat finalMat;
 finalMat =    fdstMat.reshape(1,1);//1个通道1行
 cv::String filemat;
CString outNum;
outNum.Format(_T("%d"), i);
 filemat = currentDir + _T("\\Samples_") +outNum + ".yaml"; //构造输出文件名

 cv::FileStorage file0(filemat, cv::FileStorage::WRITE);
 file0 << "SamplesMatrixRows" << height; //Mat实际大小
 file0 << "SamplesMatrixCols" << width;
 file0 << "SamplesMatrixChannels" << nBandNum;
 file0 << "SamplesMatrix" << finalMat;
  file0.release();

读入YAML文件到多通道的Mat

int srcMatrixRows;
int srcMatrixCols;
int srcMatrixChannels;
 srcFSRead["SamplesMatrixRows"] >> srcMatrixRows;
srcFSRead["SamplesMatrixCols"] >> srcMatrixCols;
srcFSRead["SamplesMatrixChannels"] >> srcMatrixChannels;
 cv::Mat srcMatrixTemp ;
srcFSRead["SamplesMatrix"] >> srcMatrixTemp;
cv::Mat srcMatrix = srcMatrixTemp.reshape(srcMatrixChannels, srcMatrixRows);

srcFSRead.release();

至此突破cv::FileStorage对cv::Mat的通道上限,实现自由读写。

参考

https://stackoverflow.com/questions/28762670/load-multi-dimensional-mat-from-text-file-using-cvfilestorage

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值