如何将opencv的处理结果保存由matlab分析
2013-11-13 19:39
281 查看
由于OpenCV本身只支持 xml、yml 的数据文件读写功能,并且其xml文件与构建网页数据所用的xml文件格式不一致,在Matlab中无法读取。我们可以通过以下方式将视差数据保存为txt文件,再导入到Matlab中。
void saveDisp(const char* filename, const Mat& mat) { FILE* fp = fopen(filename, "wt"); fprintf(fp, "%02d/n", mat.rows); fprintf(fp, "%02d/n", mat.cols); for(int y = 0; y < mat.rows; y++) { for(int x = 0; x < mat.cols; x++) { short disp = mat.at<short>(y, x); // 这里视差矩阵是CV_16S 格式的,故用 short 类型读取 fprintf(fp, "%d/n", disp); // 若视差矩阵是 CV_32F 格式,则用 float 类型读取 } } fclose(fp); }相应的Matlab代码为:
function img = txt2img(filename) data = importdata(filename); r = data(1); % 行数 c = data(2); % 列数 disp = data(3:end); % 视差 vmin = min(disp); vmax = max(disp); disp = reshape(disp, [c,r])'; % 将列向量形式的 disp 重构为 矩阵形式 % OpenCV 是行扫描存储图像,Matlab 是列扫描存储图像 % 故对 disp 的重新排列是首先变成 c 行 r 列的矩阵,然后再转置回 r 行 c 列 img = uint8( 255 * ( disp - vmin ) / ( vmax - vmin ) ); mesh(disp); set(gca,'YDir','reverse'); % 通过 mesh 方式绘图时,需倒置 Y 轴方向 axis tight; % 使坐标轴显示范围与数据范围相贴合,去除空白显示区
另外一个版本:
C++本身只支持 xml、yml 的数据文件读写功能,并且其xml文件与构建网页数据所用的xml文件格式不一致,在Matlab中无法读取。我们可以通过以下方式将数据保存为txt文件,再导入到Matlab中。 1.C++保存Mat矩阵Mat_<float> sal = saliency.saliency( im );ofstream fout;fout.open("sal_value.txt");fout<<sal.rows<<endl;fout<<sal.cols<<endl;for(int i=0;i<sal.rows;i++){for(int j=0;j<sal.cols;j++){fout<<sal.at<float>(i,j)<<endl;}}fout << flush;fout.close();2.Matlab读取显示
data = importdata('sal_value.txt');r = data(1); % 行数c = data(2); % 列数disp = data(3:end); % 视差vmin = min(disp);vmax = max(disp);disp = reshape(disp, [c,r])'; % 将列向量形式的 disp 重构为 矩阵形式% C++/OpenCV是行扫描存储图像,Matlab 是列扫描存储图像% 故对 disp 的重新排列是首先变成 c 行 r 列的矩阵,然后再转置回 r 行 c 列img = uint8( 255 * ( disp - vmin ) / ( vmax - vmin ) );imshow(img);
相关文章推荐
- 如何将opencv的处理结果保存由matlab分析
- 基于Qt与OpenCV的图片读取、保存,并利用Canny进行简单的边缘处理结果显示
- 如何使用Erdas将处理结果保存为tif格式
- 如何将视差数据保存为 txt 数据文件以便在 Matlab 中读取分析?
- 【matlab】如何产生特定格式的随机数,并保存结果
- 将matlab处理结果保存为图像文件
- 如何将spark streaming处理结果保存到关系型数据库中
- 如何将spark streaming处理结果保存到关系型数据库中
- java在线支付---09,10,11,12_在线支付_分析易宝支付网关的应答协议与处理代码,完成用于处理支付响应的Servlet的初步编写和调试,完成处理支付网关响应结果的Servlet,支付实现
- 如何处理服务器重启后,日志分析的重新挂载的问题
- 【Cocos2d-x源码分析】 UserDefault如何保存本地数据
- opencv保存Mat为xml并读入matlab中
- Javascript_Ajax:如何在前台利用JS处理$.ajax() request 中得到的不同结果?
- matlab/opencv图像处理之模板匹配
- Matlab如何保存被plot的图像
- 自己动手写CSDN博客提取器源码分析之三:处理网页保存为pdf文件
- 通过分析exevc系统调用处理过程来理解Linux内核如何装载和启动一个可执行程序
- 如何将matlab画出的图片保存为要求精度
- 在MFC中通过保存对话框保存opencv处理后图像
- 将matlab的数据保存xml 在c++下通过opencv读取;