您的位置:首页 > 编程语言 > MATLAB

Opencv中的Mat文件在matlab打开

2017-06-06 19:57 141 查看

本文感觉绕了一圈,但是不写下来不开心

1.先vs中将要保存的Mat保存为xml

详细链接

// in c++
FileStorage fs_xy0("xy0.xml", FileStorage::WRITE); // xy0.xml 是 保存的文件
fs_xy0 << "prob_idx" << xy[0];  // 将 Mat xy 重定向到 xy0中
fs_xy0.release();


2. matlab 中

下载xml2struct

下载链接

原因,matlab自带的 xmlread,反正我的版本看不了介绍。工作区(看变量值的地方)也打不开,也看不了变量值。上面这个函数,把xml打开成一个struct。

从struct读取数据

clear;
x = xml2struct( 'xy0.xml' );
x_str = x.opencv_storage.prob_idx.data.Text;
% 这里是反人类的部分
% x_str是一个字符串,也就是一个m_by_1的char变量
% str2double | str2num 可能没法读取z
% 因为z的格式没按要求存取

z=strsplit(x_str); % 按空格划分成cell

for i = 1: length(z); cao(i)=str2double(cell2mat(z(i)));  end  %反人类的操作,每个cell
%转成mat,在转成double
%cellfun(@str2num, cell)
cao(1) = [];  % 第一个数据是空的,删除。看个人情况

pic = reshape(cao, str2num(x.opencv_storage.prob_idx.rows.Text), str2num(x.opencv_storage.prob_idx.cols.Text)); %  将data按 row,col  reshape


上文总结:

字符串 != char数组 在matlab中。

‘hello everybody’是个字符串,[‘hello’ ‘everybody’] 是一个2x1的char数组

str2num不能将不合格式的字符串转成double数组,需要另外改成可以操作的数据

忧伤,想把opencv里的simpleflow用在matlab上。把flow(像素偏移)这个cv::mat保存为xml,然后用matlab打开。 :( 打开了,还不如原来的siftflow,虽然没有调参数。

感觉绕路了,opencv好像可以在matlab打开。实在不行还有mex。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv matlab