|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
# S! _7 p# y/ M, }
1. 用fprintf 函数写数据到txt,xls! G3 m6 q+ l9 v0 j; |& ]& ~
$ `/ K+ \. I1 u4 a6 D
Example:5 S* m2 ]/ g3 q' k8 t0 ~! f0 T
: s3 U5 D. k/ d) s" h6 |5 L, P+ cx = 0:.1:1; ?0 s1 e1 d K" V( X
y = [x; exp(x)];4 r; K" X' D/ N
fid = fopen('exp.txt', 'w');
" p$ X; o3 q' {) e0 b. Pfprintf(fid, '%6.2f .8fn', y);
# q# i) [# @( t1 d5 K$ }; S2 V- a( ifclose(fid)
; ?; {0 s$ I3 ?# V3 l" }tip:执行上述代码执行,肯定不会换行的,换行的问题试一下下面的代码- _; O7 @% o5 p9 |) p4 d) I
L- v6 ?, P9 l) N3 C0 H( U4 V
x = 0:.1:1;
3 @; f9 E, ?/ T9 Zy = [x; exp(x)];
# m1 R' g3 M) K( b+ m! Kfid = fopen('exp.txt', 'wt');7 T4 l9 e# [& k5 I1 m
fprintf(fid, '%6.2f .8fn', y);
3 ?3 @: S: z M" h# W9 Hfclose(fid);+ V' z B7 Q; N9 i) _& T2 C0 ^
7 W* a2 w2 a! R
这次就没有问题了,我们要注意fopne的参数wt 而不是 w,这是matlab的在线帮助的东东
( P, O3 k2 @! ]) e4 @' c+ n$ i4 [2 M2 `, g% L) b
fid = fopen(filename, permission_tmode)on Windows systems, opens the file in text
, ]* O8 e( B+ i0 ?6 C/ Emode instead of binary mode (the default). Thepermission_tmodeargument consists
8 ?# \0 r( B8 j/ b7 q7 M% \6 k# Xof any of the specifiers shown in thePermission Specifierstable above, followed
3 a( \; G* i2 s) qby the lettert, for example'rt'or'wt+. On UNIX®systems, text and binary mode
) m) Z5 t% i G) I2 r" H% _are the same. (UNIX is a registered trademark of The' M: e" [. j# i& I( M
Open Group in the United States and other countries).( W: b2 V0 S$ a( O. h6 l0 U) q* \
5 m- w- ~8 R2 @0 G
就是有两种读取模式binary or text. When choosing the binary model,No characters are* y. m) }: ]9 F }+ X
given special treatment. 所以我们选择要注明text模式。
8 J; S. P/ I% T$ w8 V6 {1 {# ?" ^1 n1 e% q( k9 w6 u
2. dlmwrite :将一个矩阵写到由分隔符分割的文件中。
2 U4 i T8 q' M* p6 l+ j8 r! q( [5 O! k, H: j* |8 W1 [
在保存整数到文件时使用save存为ascii文件时,常常是文件里都是实型格式的数据(有小数点,和后面很多的0,看着很不方便)。于是要保存此类数据时,我们可以使用此dlmwrite命令。6 s1 `# F6 T' u, b" U, L1 A% n; |
3 z% W% H4 ] v# M B
使用方法:
1 @8 i( h Z c; P- {dlmwrite('filename', M)
D; L& _( X* p" u' H3 s/ ]使用默认分隔符“,”将矩阵M写入文本文件filename中;, P2 `+ Q( ?5 v8 `- O
dlmwrite('filename', M, 'D')$ ]7 ^# B6 Q- [0 s
使用分隔符D分割数据,“t”表示tab分割,“,”为默认分割符;
3 C; R, A9 S/ J! Ndlmwrite('filename', M, 'D', R, C)
1 O# q+ _: P4 q4 i1 h从矩阵M的第R行、第C列开始,作为要写矩阵块的左上角,将数据用D分割写入文件。- Q4 P- ~1 W/ H8 V3 s; E! {) C5 s6 c
其他用法有:1 B- ]1 b9 s+ V0 G+ }" p
dlmwrite('filename', M, 'attrib1', value1, 'attrib2', value2, ...)
0 v' p" G. p, L! Ydlmwrite('filename', M, '-append')3 [2 p9 D6 s5 J- s, P
dlmwrite('filename', M, '-append', attribute-value list); U2 u9 y$ u/ L' q: \4 n: q
D+ c8 d. R! G, `( _4 |2 ], f* d. ^3 ~例如:
. D. a) n( w9 C, e$ z z7 B7 g3 z) X9 ma = [1 2 3; 4 5 6; 7 8 9];5 h' |# l2 T! f s- ?7 r( M
dlmwrite('test.txt', a);& P$ Z' Q( L; P( H5 M- q6 |
8 U: R. D- G9 y7 }0 {6 d0 R: M
则test.txt中的内容为:
6 D b, P5 x* }1,2,3% y/ c5 A2 M2 i2 }* e3 S. V+ x, z
4,5,6
8 O% z. P; N+ c' [7,8,9
. l0 ~, K' f5 I4 }0 }$ k
4 `- ?2 ?8 I0 _' [而使用save4 b/ }2 x( D. y% M' a; r) _, {0 }
a = [1 2 3; 4 5 6; 7 8 9];
( J! k$ b1 p" _8 b% Hsave 'tst.txt' a -ascii;文本文件里的内容为:" _6 c' T; l/ w
1.0000000e+000 2.0000000e+000 3.0000000e+000, h8 T3 A3 E$ n/ B% a* Z. J" l, z# [
4.0000000e+000 5.0000000e+000 6.0000000e+000
4 h1 [ K! V, ~0 K0 X$ M- C( p 7.0000000e+000 8.0000000e+000 9.0000000e+000
9 C/ P4 B0 J5 @( b+ o/ `
5 n, }+ A% U' x' E
Q' ^- C: `& Y" O7 T; `7 f3.xlswrite 写入excel
) k9 z* c A! Q' i* i( @, b6 f x, y- o6 R
4.fprintf和dlmwrite区别, h2 \: l' l! Z! ]0 R2 q
6 d0 ] j# W( l% n
MATLAB在图像处理中的应用,实际是对图像矩阵的操做运算,MATLAB在图像处理中的常用的命令有:' J# L3 U1 A7 v( W
imread(): 从图像文件夹中读取图像的函数;
: a8 [& |5 i# w- D% K% K$ limwrite(): 输出图像的函数;. T+ e% i2 n: d5 h: |3 t
imshow(), image(): 图像显示于屏幕的函数;
1 @ M( A, `- J3 F" E C9 rimcrop(): 对图像进行裁剪的函数;;# I0 J( R" U& E2 X
imresize(): 实现对图像的插值缩放的函数;3 m! }$ H, _8 Q: }9 c) E% p n
imrotate(): 用实现对图像的旋转。
- M7 ^4 ]* _: b7 p4 pim2double(),double(): 将图像数组转化为double类型;: j- a3 D3 G4 p& {8 L9 v* k
im2uint8(),uint8(): 将图像数组转化为uint8类型;& F ~5 f6 k9 ~# [: f+ M8 m% g
im2uint16(),uint16(): 将图像数组转化为uint16类型;
5 y" \6 g# }/ a$ L0 D8 A* |5 [关于上述的命令使用方法可以参考一些MATLAB方面的书籍或者用MATLAB自带的帮助(help or doc)命令.
8 u8 ?: Y D) d* Y- h+ ?如 我想知道dwt2()命令的使用方法 可以执行下面的命令: ^4 K$ j( y/ A9 `: M' c
>> help dwt2 或 >>doc dwt2/ K/ s+ A! v- q/ t& w& I$ n
系统就会告诉你它的使用要求和方法,如果系统说找不到对应的帮助文件,那就可能是你装的MATLAB里面没有这个命令,那很可能这个命令就不能使用.
. p# S% R3 |* z0 m5 M在图像数组的输出到文件的操作上,我发现fprintf比dlmwrite明显快很多,但这两个输出的数据格式有些差别,见下面操作:/ Y- @. |; a" U5 r+ S; }
>> a=[1 2 3;4 5 6;7 8 9]" _/ \6 U1 f2 B+ V! i8 S R& f9 Q
a =2 W" |+ R, C! r5 l2 ~
1 2 3
# y" n2 H. W7 `4 O3 F 4 5 6
( b* {; g- n* M2 m 7 8 9
4 P( ~" U% Z3 i, y q, A' s>>fid = fopen('exp.txt','w');& r3 M# N& z) A8 E# i8 P7 W4 \0 d
fprintf(fid,'%2.0fn',a);/ [9 d* K; o& {. ?$ C6 R
fclose(fid);
8 ]( Q8 Q8 y* b6 _; k% l8 J+ X
+ y4 a) y- X- T>> type exp.txt
( D. _4 u. I" [+ P: r* `; K2 y* M5 I
1, [; K$ B4 j$ i" |* W
42 h4 `: Z$ s, ~
7& o4 {) g M' |" g! l" }: @9 k
27 Y2 ]" Q2 G3 q6 F
55 N4 x$ f) w' c6 n! @5 A2 O
8- h& f5 ~9 t9 I6 Q8 v* b
3
8 @$ A4 K8 c/ j$ l6( m* j- s. j' P& a5 E0 f: g7 t
9
6 C# |% \6 ^9 v3 }; Ffprintf输出是一列一列的从左到右输出。0 v. ^( }8 n# K* H- ?& E$ }
>> dlmwrite('eg2.dat',a,'n');
- U5 X9 @' y" a' L. x# m" h>> type eg2.dat
3 |: A; _5 n4 k( @/ K$ F17 {- e6 i$ b4 q. g
2: \, `" f. B s$ [" d
3: X0 g w: D9 }6 ]( B6 Y; W7 j
46 y, }" `2 n- H# W, [
5
: [" \' m7 X2 k3 _6
9 T$ _3 m- B6 W9 ~# Y; P7" Z/ K- Y# t, n' y2 s. }
8# Q* b' C6 |# n: V8 ]
9
4 v+ c) A _' P t# ^dlmwrite输出是一行一行的从上到下输出。
3 g$ b$ v0 h+ P# Z" h下面是一个比较简单的图像处理程序:
9 p& S2 U4 j0 g8 L7 ?clear;%清除当前工作区所有变量7 l/ a" I6 O/ h5 T( z
data=imread('E:2D前处理eg1.bmp');%从图像文件夹中读取图像eg1.bmp
$ l3 _& y8 H3 x$ S4 `& Odata=double(data);%将图像数组data转化为double类型
+ B8 u* t1 [& [ t5 I[x,y]=size(data);%求数组大小,x是data数组有多少行,y是data数组有多少列/ y/ m4 W; h! _3 \
data1=imresize(data,[x,y*2/1.732]);%实现对图像的左右插值放大2/1.732倍* ? q8 g- ?% X6 }& j' ? ?
[x,y]=size(data1);%%求放大后图像数组大小: V9 i# j# V$ n: g
fid = fopen('E:2D前处理Particletest.dat', 'wt');%打开图像数组的将要输出到文件- z2 k9 n% D( p
fprintf(fid, '%2.0ft%2.0fn', x, y);%输出x,y值
$ j8 X) u9 T D& [% @. n8 A7 Qfprintf(fid, '%2.0fn', data1);%输出图像数组数据
# m, F( J4 k& J+ w- I Ofclose(fid);%关闭文件指针
; _5 n, T$ o! E- P. S$ k. u8 Y" T4 k# @! ~, |1 |5 u# a& @5 f1 s
* U' Z- o) l/ f2 a |
|