|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1 A/ h- e8 n; D2 H6 K' `1. 用fprintf 函数写数据到txt,xls2 I$ ?6 S7 J$ \
. ]; x; [+ u; }% n! D" e/ z; y8 v
Example:& |! w% E: {% t% A/ E
+ ?: ?7 a) u) I0 c$ p) D5 @3 k
x = 0:.1:1;
0 y7 J- z: t( d- }) V& Ty = [x; exp(x)];
# I3 U2 `) b0 o3 t& bfid = fopen('exp.txt', 'w');- J- K- i* n3 s
fprintf(fid, '%6.2f .8fn', y);& v$ U: |4 Z9 \& h1 S& Z
fclose(fid)8 k/ e6 }" l" I, d
tip:执行上述代码执行,肯定不会换行的,换行的问题试一下下面的代码
' w J; {& w# j
* d- {$ k9 _/ vx = 0:.1:1;# q. ?. }. a! K$ `
y = [x; exp(x)];' T b2 d4 c3 U; t! M/ S5 ]: ?% l: q/ x
fid = fopen('exp.txt', 'wt');
6 u; c: E! C, ?5 Rfprintf(fid, '%6.2f .8fn', y);( w8 A d& ?8 ]: r& }# |* X- A
fclose(fid);
! z, m: ~, N4 H8 W, \! u4 D) W3 Z0 P' o( z. U) B
这次就没有问题了,我们要注意fopne的参数wt 而不是 w,这是matlab的在线帮助的东东% v3 ?! a: N$ I+ t/ c
2 F9 {: W4 ~3 l- ~1 e" R
fid = fopen(filename, permission_tmode)on Windows systems, opens the file in text
' C- F( g7 w. O: v- V* mmode instead of binary mode (the default). Thepermission_tmodeargument consists
! h$ p2 {; [* H# h9 nof any of the specifiers shown in thePermission Specifierstable above, followed4 L+ p* Y- K! }" Y
by the lettert, for example'rt'or'wt+. On UNIX®systems, text and binary mode
; o% Y# E3 z. v, _are the same. (UNIX is a registered trademark of The
8 j- A+ [5 Y" h4 S6 b* FOpen Group in the United States and other countries).1 W" q2 q h b1 g( w2 l
5 \9 [+ a* S& A! H! o$ I
就是有两种读取模式binary or text. When choosing the binary model,No characters are
9 W7 [& {4 M& \4 x. h; ?+ Egiven special treatment. 所以我们选择要注明text模式。& T7 ~& g) Z; G* F7 q
) x6 s7 T( h' \& x, Z; u* w9 O( |6 ?
2. dlmwrite :将一个矩阵写到由分隔符分割的文件中。1 O B9 `1 s! u! A8 U' V
6 W! |) S% w: \" W在保存整数到文件时使用save存为ascii文件时,常常是文件里都是实型格式的数据(有小数点,和后面很多的0,看着很不方便)。于是要保存此类数据时,我们可以使用此dlmwrite命令。
( l1 N! }: z# C' D' ]. i5 {/ A! d8 V8 @* ` `6 d
使用方法:# x3 A3 a r2 @6 l2 i% _: U$ s/ V
dlmwrite('filename', M)
3 Z% |- o O& x; ]" |$ H# f使用默认分隔符“,”将矩阵M写入文本文件filename中;
* F3 [( S. K9 x% p/ X: _dlmwrite('filename', M, 'D')
5 D( V; F& y6 j0 v' ^使用分隔符D分割数据,“t”表示tab分割,“,”为默认分割符;2 k/ H, c5 p8 m) G% B- e2 c4 b/ s: a- J
dlmwrite('filename', M, 'D', R, C)( v2 B; G7 v O: ] a
从矩阵M的第R行、第C列开始,作为要写矩阵块的左上角,将数据用D分割写入文件。( F' q: \7 X% e0 K) C% H$ j' n
其他用法有:* ~" T ^" r0 ~' k1 C; R
dlmwrite('filename', M, 'attrib1', value1, 'attrib2', value2, ...)
/ r1 s7 r2 W# `6 O& Wdlmwrite('filename', M, '-append')
, f+ S& S" z5 a; O G+ _dlmwrite('filename', M, '-append', attribute-value list)( V) I5 G- B! Z$ [
$ A: ]% F/ Z# H# p/ d例如:0 p3 z1 j" Q- v- N8 x `( C
a = [1 2 3; 4 5 6; 7 8 9];0 c2 S# z3 g4 O% J5 b$ s6 ~
dlmwrite('test.txt', a);
6 X% q1 @! @6 Z3 j
0 |# z( S0 O4 |' _则test.txt中的内容为:
- Q" V. V3 A7 S- ^; z1 T) o8 ]1,2,3
+ q* g: S5 X/ Y8 y8 M1 T5 E4,5,6
4 y! a* V P, T$ ^, m! Y7,8,9, m C. _/ w. J
9 Q" Z. p. b5 @3 U2 S而使用save
7 a6 c) o7 _& d# G: B5 ga = [1 2 3; 4 5 6; 7 8 9];
7 J1 ]% I% @; @0 N7 u( g0 Y, Tsave 'tst.txt' a -ascii;文本文件里的内容为:9 e8 `% K* S# C, ^
1.0000000e+000 2.0000000e+000 3.0000000e+0004 O4 U% J* b* e6 `5 I% Q
4.0000000e+000 5.0000000e+000 6.0000000e+0009 g2 ?$ ^) D* V1 t
7.0000000e+000 8.0000000e+000 9.0000000e+000
# } b+ s( U6 i6 H: d0 ~
3 \6 ^# G1 |: V' j2 L- X
6 c3 s0 C8 m, `& i/ N4 q, x2 `3.xlswrite 写入excel& S7 f5 B7 g% I4 i+ l
/ ?/ l& R! b' ^" c4.fprintf和dlmwrite区别
1 L- f2 l7 ]* x& v: z) L \9 u/ y* ^- Y7 D, [& C. E
MATLAB在图像处理中的应用,实际是对图像矩阵的操做运算,MATLAB在图像处理中的常用的命令有:
2 n! ]7 W) x( f# o. simread(): 从图像文件夹中读取图像的函数;
( F, m! s7 ~( Rimwrite(): 输出图像的函数;
' `' v! w4 z9 e# zimshow(), image(): 图像显示于屏幕的函数;
; [1 p/ M8 _ F( Vimcrop(): 对图像进行裁剪的函数;;
( r: l/ ^5 _5 \8 K6 Timresize(): 实现对图像的插值缩放的函数;/ e2 L w; }# k' Z$ D" Q
imrotate(): 用实现对图像的旋转。
* \0 \% w0 d4 L" vim2double(),double(): 将图像数组转化为double类型;
/ Q& w0 H e/ L; E" ~1 x4 X+ }im2uint8(),uint8(): 将图像数组转化为uint8类型;! F; Q! `- X5 t7 C
im2uint16(),uint16(): 将图像数组转化为uint16类型;% @2 d* z# R- {9 [' ~
关于上述的命令使用方法可以参考一些MATLAB方面的书籍或者用MATLAB自带的帮助(help or doc)命令.
7 f$ g5 {, R$ _( A0 M0 T如 我想知道dwt2()命令的使用方法 可以执行下面的命令* k* i3 F& n' ?3 \( K8 @
>> help dwt2 或 >>doc dwt2
. d0 W+ G* i |( E0 i! T! m3 Q系统就会告诉你它的使用要求和方法,如果系统说找不到对应的帮助文件,那就可能是你装的MATLAB里面没有这个命令,那很可能这个命令就不能使用.
8 n( H7 e6 R4 T在图像数组的输出到文件的操作上,我发现fprintf比dlmwrite明显快很多,但这两个输出的数据格式有些差别,见下面操作:! ^7 T3 e9 u( H( J6 M
>> a=[1 2 3;4 5 6;7 8 9]
- G8 k" z0 d% ia =; s: [, \* O' o' w+ A- i- b
1 2 3
4 H) X3 y& T( D, G% f( J; C 4 5 6
[& b$ |+ J* _8 ]6 b6 j- x9 Z 7 8 9
: c- H4 J. d7 q) w ]0 j; v>>fid = fopen('exp.txt','w');' c- r& j) V, ]
fprintf(fid,'%2.0fn',a);
) u& S! d, m! K8 ? Ffclose(fid);
1 ^6 E6 F* a' w7 q
( f, y s4 J# I9 |/ f+ C" q>> type exp.txt* O; w% S( ]# E! F5 a' R
# v) h+ ]% V$ B. I! Z3 z! I
1
( `5 F8 f; [% e- Q. B. p4 M) m7 A" ~. \+ l! F0 }- k. E+ d j
70 H, S" w0 C( {4 x% s, Z {
2. z- P/ d' u3 e# A8 q
5 l. y% i) `( _4 c) n2 Z
8
B8 c% |' ~7 g* h8 u30 g' p5 T0 V8 k+ Z& }; q
6
* _ x5 i" c# E+ \ _6 T# A9
! Z2 W+ S( m5 Kfprintf输出是一列一列的从左到右输出。, e" s4 \' R) |' k; E
>> dlmwrite('eg2.dat',a,'n');( ~2 P" }( L/ U' G4 o- d# i
>> type eg2.dat
! h$ p% _8 x5 m1
1 \- i* {' d; Q# t& @+ i1 M5 D2 g5 v2' a' B: Z$ b7 w, @
3
* ~2 n# M: W4 e1 w ~4
) W4 T1 t& Y; Y4 h- o# D1 q0 E5
6 _" x2 b' y" {" Y$ L$ J# K. v6
8 W9 G$ i; C s z7 B7
9 E, ]" B0 Z" A# p, f$ s% f( \8
$ T1 D* A% c2 n9 t- R8 y) Z8 A9 T3 Y# T e5 E1 a
dlmwrite输出是一行一行的从上到下输出。
+ s ?( B/ M# U6 D0 Q下面是一个比较简单的图像处理程序:" t7 F, L: }3 y+ d
clear;%清除当前工作区所有变量' J4 o* v7 z4 Z6 I0 C7 |
data=imread('E:2D前处理eg1.bmp');%从图像文件夹中读取图像eg1.bmp
) U# X" O$ Q: \7 Qdata=double(data);%将图像数组data转化为double类型
; T' y+ H% Z/ V4 l* [/ {% i[x,y]=size(data);%求数组大小,x是data数组有多少行,y是data数组有多少列
! v8 j* E( d0 m% Q9 kdata1=imresize(data,[x,y*2/1.732]);%实现对图像的左右插值放大2/1.732倍
. r9 y, }4 D( w' Q[x,y]=size(data1);%%求放大后图像数组大小! ?" P" T, r( z+ z X4 |
fid = fopen('E:2D前处理Particletest.dat', 'wt');%打开图像数组的将要输出到文件4 T! _) W) |2 t6 c9 E, k% U& U
fprintf(fid, '%2.0ft%2.0fn', x, y);%输出x,y值
1 G8 q0 c1 a2 o- p/ efprintf(fid, '%2.0fn', data1);%输出图像数组数据
+ ^- j( p8 `- ^; w. D( K* E1 ufclose(fid);%关闭文件指针3 I( z# p) C. H2 s& T" \$ S8 B
9 P/ d7 L9 b9 Z7 y: a0 {
* x" E9 L& E3 W6 l; ? |
|