找回密码
 注册
关于网站域名变更的通知
查看: 424|回复: 1
打印 上一主题 下一主题

从Matlab导出数据(fprintf,dlmwrite,xlswrite)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-4-2 10:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
2 n; \9 y* K3 h1 n  m( {4 O
1. 用fprintf 函数写数据到txt,xls
* Z! K- a& G; T5 A) o
6 ~9 c7 ^2 i6 ]) S1 e2 r. V% ?Example:
: G# w0 h! [4 ^' ]/ w' x7 |- g
1 m9 I& J* e5 @' V5 W* k5 |x = 0:.1:1;( }( S; F% F4 v2 O: C
y = [x; exp(x)];
7 G& a5 |+ b: i4 w' c4 [fid = fopen('exp.txt', 'w');4 I3 N/ o0 y$ m9 R$ W
fprintf(fid, '%6.2f .8fn', y);4 X% m1 X( Z0 l7 M! S& J
fclose(fid)
" d+ `6 }) `7 l0 j$ L9 Y" M% Mtip:执行上述代码执行,肯定不会换行的,换行的问题试一下下面的代码
- L. b/ [/ q) P* R
* H2 i5 X- N; b. A' dx = 0:.1:1;
5 m" v9 }3 X2 M% ?y = [x; exp(x)];/ }! P8 L5 a5 D1 v9 Z1 h  G
fid = fopen('exp.txt', 'wt');( k$ d4 k% e9 ^  I) \( G' F% @, j* I
fprintf(fid, '%6.2f .8fn', y);
2 G- H' w# w* \/ L5 \3 Efclose(fid);
6 a8 C" e3 U  l7 `' K: o' \
! t  d% p& f7 y+ i* _这次就没有问题了,我们要注意fopne的参数wt 而不是 w,这是matlab的在线帮助的东东* ^. A% s, m" k4 |$ k
1 g! k; N- P8 S+ ?2 O- p) {' y% X
fid = fopen(filename, permission_tmode)on Windows systems, opens the file in text9 e% y0 c3 y9 _5 l4 _
mode instead of binary mode (the default). Thepermission_tmodeargument consists
, k! e; @2 G& s# Q1 j! m/ b( dof any of the specifiers shown in thePermission Specifierstable above, followed4 J5 S, [8 E! |/ }
by the lettert, for example'rt'or'wt+. On UNIX®systems, text and binary mode
: n' U* Z* e5 s; Hare the same. (UNIX is a registered trademark of The
( @; B6 f- ^$ u, U& f& s( t$ R2 eOpen Group in the United States and other countries).+ ?2 K: X0 o" ^* @
. u" s4 }( g" s
就是有两种读取模式binary or text. When choosing the binary model,No characters are/ X$ j( ], o" D+ x- z
given special treatment. 所以我们选择要注明text模式。8 z4 r- m! C$ o4 d* ~

$ L% ?# O& a+ X  p8 l2. dlmwrite :将一个矩阵写到由分隔符分割的文件中。, ~' r; o. o$ |3 K; C

' J/ ^1 b$ m' _/ `0 d( {在保存整数到文件时使用save存为ascii文件时,常常是文件里都是实型格式的数据(有小数点,和后面很多的0,看着很不方便)。于是要保存此类数据时,我们可以使用此dlmwrite命令。* @8 k% Q! C3 b" W4 i
. i4 l' M; A& m! y; Q' g
使用方法:
  q: }- \5 ]) ?, Odlmwrite('filename', M), \# N0 N$ q6 u& _# Q
使用默认分隔符“,”将矩阵M写入文本文件filename中;
! C+ F4 t+ h1 ~2 hdlmwrite('filename', M, 'D')
1 u' ?4 @3 [; m7 h使用分隔符D分割数据,“t”表示tab分割,“,”为默认分割符;
- d# T( Q5 I6 U2 P! Kdlmwrite('filename', M, 'D', R, C)* v/ {% L3 ?2 |4 q8 R
从矩阵M的第R行、第C列开始,作为要写矩阵块的左上角,将数据用D分割写入文件。3 C$ ~7 l' \0 y1 F# q3 U
其他用法有:) |1 M9 S4 W/ \: D' c/ ]( y' Z
dlmwrite('filename', M, 'attrib1', value1, 'attrib2', value2, ...). O" e5 F; x" h; O3 Q) ]) c) a
dlmwrite('filename', M, '-append')
4 E6 r( P; d( d0 bdlmwrite('filename', M, '-append', attribute-value list)
, v6 S4 z  P3 V6 N' O; v1 V0 E1 H* n3 \
例如:
" n1 y" I/ L% }- \# r9 R' Ka = [1 2 3; 4 5 6; 7 8 9];
) o+ S$ l: Y0 T2 {6 pdlmwrite('test.txt', a);
. }' l* e  q4 o; ]. X  t$ u, R4 M  I' `& s0 R
则test.txt中的内容为:7 p( O" m5 Q; ?% _
1,2,3) h. G, x) Y1 K' n3 q8 u
4,5,6+ a. c6 @1 s- q4 P
7,8,9
" b2 l/ _0 s& h
. S3 k" ?, x) m( ?9 ^# _( i而使用save
. P; `7 {6 B0 H" M, Z2 z0 |: _+ Fa = [1 2 3; 4 5 6; 7 8 9];8 l3 W" q: _: v; r8 T
save 'tst.txt' a -ascii;文本文件里的内容为:4 S0 b7 M1 f0 d1 O( H9 L
   1.0000000e+000   2.0000000e+000   3.0000000e+000# [9 N# `" v+ U( Y
   4.0000000e+000   5.0000000e+000   6.0000000e+000
. a: o% o; \5 C' B   7.0000000e+000   8.0000000e+000   9.0000000e+000, v! q  k! U6 ^! h- {3 S  c
9 D$ [( _7 Y* ~$ K

8 c+ N/ f) J9 y- \- _3.xlswrite 写入excel2 F/ w+ L6 u5 G& \: C+ m: A
8 p; D& }* o+ \+ {' ?
4.fprintf和dlmwrite区别; e8 _8 C( m. r" |0 j
: U2 `0 `& y+ B6 R8 H
MATLAB在图像处理中的应用,实际是对图像矩阵的操做运算,MATLAB在图像处理中的常用的命令有:
) Q6 i! g8 L) Q+ D( mimread(): 从图像文件夹中读取图像的函数;
4 U& U  q* p0 I* V; l2 {3 B  cimwrite(): 输出图像的函数;
4 Y8 e( B5 h3 I- D. Rimshow(), image(): 图像显示于屏幕的函数;. N/ ~- i$ {% |4 V1 m; o+ g
imcrop(): 对图像进行裁剪的函数;;) E% e' p" r7 \* z# ]
imresize(): 实现对图像的插值缩放的函数;% L- h8 t# ]3 H2 |' N6 J3 L9 k
imrotate(): 用实现对图像的旋转。
$ B3 V& a& S' T. l4 A; _im2double(),double(): 将图像数组转化为double类型;+ a, o5 T5 g9 ~9 k
im2uint8(),uint8(): 将图像数组转化为uint8类型;
1 c! ?) I/ z" Fim2uint16(),uint16(): 将图像数组转化为uint16类型;
$ M' s/ L% U3 M/ G7 p: {关于上述的命令使用方法可以参考一些MATLAB方面的书籍或者用MATLAB自带的帮助(help or doc)命令., f2 Q# b- ^0 t
如 我想知道dwt2()命令的使用方法 可以执行下面的命令
" P# k+ z9 C, z4 X5 U' Z>> help dwt2 或 >>doc dwt2
/ C: G) P9 N* p, Z; r系统就会告诉你它的使用要求和方法,如果系统说找不到对应的帮助文件,那就可能是你装的MATLAB里面没有这个命令,那很可能这个命令就不能使用.3 y' U) k# v& I9 l' y* L+ }& q" y
在图像数组的输出到文件的操作上,我发现fprintf比dlmwrite明显快很多,但这两个输出的数据格式有些差别,见下面操作:
, |$ q7 ~# A, h- p>> a=[1 2 3;4 5 6;7 8 9]' f7 m2 B4 L) k3 D# }
a =' [0 D. K( D8 `+ i9 `7 k: u
     1     2     3
# T& U) ^1 ?# Z7 ^9 ?3 D     4     5     6
8 S6 ]5 |. Q) h1 l     7     8     9) U* `) j: \4 c5 ~' u! Y+ \/ n
>>fid = fopen('exp.txt','w');5 n& E& ?* c, f* A
fprintf(fid,'%2.0fn',a);+ J% i- a# q) [+ |
fclose(fid);
4 f6 N$ b6 \" Y# X5 ~
7 A8 D: j% m. }& ?) V>> type exp.txt# `1 I# z. Z" X, Y' R

0 Z9 ?! \, v- o5 T0 B19 r- T- W! i( O) C0 t: H, N5 f
4
& `- t9 ^8 R% S' o7* g8 s5 N4 x' H( y: ]* o# O. n, Z
29 I  B1 S5 H& q+ k. A
58 v& \, T* d8 j8 o! O
8
* E1 q# y4 f( f' `/ u( R% W3
/ P5 b) p6 j; t5 N( J+ S6# [1 V/ Y5 ~9 u
9
6 a/ K  M4 ^5 _  X% J; s0 T/ nfprintf输出是一列一列的从左到右输出。5 E4 x$ S! S: W* n9 d" Y
>> dlmwrite('eg2.dat',a,'n');* Z: y1 g$ t0 X: K4 h7 l- ]5 o% D, ]
>> type eg2.dat9 S7 w# m5 Z! m/ h' g% v
1
3 S' M, p+ T, ~2 P7 g2
, P8 h& r9 f* m  S9 G3
  [- y' N6 V6 L) r& p+ {* N! }44 C( _0 t; s/ e2 s
5- b) {9 m6 b8 h( C5 L
6
1 ^: {. N. u+ d' _; s7
4 M. T. q6 w3 e% W9 q2 @8
6 @6 W3 U1 s5 a8 s9 |9
- _2 K3 V* H: r2 G( u- {dlmwrite输出是一行一行的从上到下输出。0 e, `9 d& P' d' V. B
下面是一个比较简单的图像处理程序:
% u2 o0 H9 p) H0 wclear;%清除当前工作区所有变量
3 `! y/ O$ R8 \data=imread('E:2D前处理eg1.bmp');%从图像文件夹中读取图像eg1.bmp
/ `0 Q  i# \- h( m, pdata=double(data);%将图像数组data转化为double类型
0 \9 Q) _- i. P2 U[x,y]=size(data);%求数组大小,x是data数组有多少行,y是data数组有多少列
$ ~1 K* i' Y. i" ?3 Gdata1=imresize(data,[x,y*2/1.732]);%实现对图像的左右插值放大2/1.732倍9 b6 x7 i& i% a
[x,y]=size(data1);%%求放大后图像数组大小
, @6 S4 v, i# A+ {7 |8 s9 Z/ v" v6 ffid = fopen('E:2D前处理Particletest.dat', 'wt');%打开图像数组的将要输出到文件
0 c9 G$ O0 ~1 r2 X2 w' }fprintf(fid, '%2.0ft%2.0fn', x, y);%输出x,y值% M0 a; ]) h. a- ~& A. w* q
fprintf(fid, '%2.0fn', data1);%输出图像数组数据
9 A( }$ ~! I& \/ B- B, F. A- Ifclose(fid);%关闭文件指针- a% m2 [" B3 y' L' i! B. H8 k
7 F! D; L- q5 ?! [6 Y) {

! ]: F0 q1 z$ ]1 _( m8 _+ _

该用户从未签到

2#
发表于 2020-4-2 18:27 | 只看该作者
导出的很详细,函数表述很详细,值得学习
, y; y! A" {4 ?0 q2 U* x: _[x,y]=size(data1);%%求放大后图像数组大小8 B8 e- N% R5 H6 X2 _- d/ K" }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 01:51 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表