上海启嘟渡科技商贸有限公司
SEARCH

与我们合作

我们专注提供互联网一站式服务,助力企业品牌宣传多平台多途径导流量。
主营业务:网站建设、移动端微信小程序开发、营销推广、基础网络、品牌形象策划等

您也可通过下列途径与我们取得联系:

微 信: wxyunyingzhe

手 机: 15624122141

邮 箱:

如何将opencv的处理结果嬗蒻atlab分析

更新时间:2024-12-29 21:35:11

由于OpenCV本身只支持 xml、yml 的数据文件读写功能,并且其xml文件与构建网页数据所用的xml文件格式不一致,在Matlab中无法读取。我们可以通过以下方式将视差数据保存为txt文件,再导入到Matlab中。

void saveDisp(const char* filename, const Mat& mat)

{

FILE* fp = fopen(filename, "wt");

fprintf(fp, "d/n", mat.rows);

fprintf(fp, "d/n", mat.cols);

for(int y = 0; y < mat.rows; y++)

{

for(int x = 0; x < mat.cols; x++)

{

short disp = mat.at(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;

% 使坐标轴显示范围与数据范围相贴合,去除空白显示区

多重随机标签

猜你喜欢文章

QQ客服 电话咨询