|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
3 G, C& z' @$ o) y5 H
1. 用fprintf 函数写数据到txt,xls
. s) x$ [5 O! g8 g/ B( S* ^# \% k8 u( Z" t# K
Example:/ ] u' [. N9 @) N. y
9 u+ x, a* s' x- s6 n, Kx = 0:.1:1;+ h% ] Q% G. S! h
y = [x; exp(x)];
7 N3 L% O9 Q/ L- @* z7 T& X) f; F; h$ \fid = fopen('exp.txt', 'w');% L' k4 a X0 G, G5 J; S% A) D
fprintf(fid, '%6.2f .8fn', y);2 w0 [ Y/ `& a3 l6 Q O
fclose(fid)
" f3 ~) @: Q: c, v* _$ A' A# ttip:执行上述代码执行,肯定不会换行的,换行的问题试一下下面的代码2 r% j5 ] P K. b5 D: a! o
# i7 Z& W5 [0 l9 a; h% i- d
x = 0:.1:1;6 B3 Z4 a4 L$ S
y = [x; exp(x)];
. x& p S1 l8 r* m! Ifid = fopen('exp.txt', 'wt');
; G3 G; B; ]7 @$ k& i4 Ufprintf(fid, '%6.2f .8fn', y);# f- ]5 `$ c( j& d) @
fclose(fid);
7 _5 F3 ~: c" E5 `- b9 n4 M* z1 H: J7 ~# A1 H
这次就没有问题了,我们要注意fopne的参数wt 而不是 w,这是matlab的在线帮助的东东
$ {1 [) H7 {# {0 ]5 V
% ?8 D) w- o0 m- h2 D$ Tfid = fopen(filename, permission_tmode)on Windows systems, opens the file in text Q4 q5 d3 a( x4 S
mode instead of binary mode (the default). Thepermission_tmodeargument consists0 `0 R. ^! `! h) I W( M- r
of any of the specifiers shown in thePermission Specifierstable above, followed
* r8 m# W; N& X x9 |$ }) m8 ^6 aby the lettert, for example'rt'or'wt+. On UNIX®systems, text and binary mode F4 s) Q9 P8 U, L! E* q- ^) w
are the same. (UNIX is a registered trademark of The
. P# H8 ]7 m% {) C) ^Open Group in the United States and other countries).( a& w: H6 G; Z8 g( }/ V; o
6 W! @0 _, f6 ^+ K7 m
就是有两种读取模式binary or text. When choosing the binary model,No characters are) q9 G: w$ `3 Z, h8 }. n
given special treatment. 所以我们选择要注明text模式。
/ T: ~- v, {/ q" a: r4 A# V: o( F
* X7 C8 B, }# a( E# Z! l2. dlmwrite :将一个矩阵写到由分隔符分割的文件中。' C2 d' t% {: E( q# m- R3 r
, @0 f3 p* E. c- J+ K$ q8 [* P
在保存整数到文件时使用save存为ascii文件时,常常是文件里都是实型格式的数据(有小数点,和后面很多的0,看着很不方便)。于是要保存此类数据时,我们可以使用此dlmwrite命令。& C' H3 T8 x" S4 i5 T- l
( z" D; K, i S6 U3 f使用方法:
5 F7 U9 c) n% |% j* t3 s4 ?; {dlmwrite('filename', M)$ W$ K+ X9 y/ |: Z# D3 Q
使用默认分隔符“,”将矩阵M写入文本文件filename中;. w+ A7 p8 G) L; O4 ?* x+ ~3 w
dlmwrite('filename', M, 'D'); n, B6 _. F/ N/ r# K4 i3 _
使用分隔符D分割数据,“t”表示tab分割,“,”为默认分割符;
4 @1 ~( F# v% k" @. ~8 xdlmwrite('filename', M, 'D', R, C)# o1 e+ d" Z- K. L6 q( |: Z
从矩阵M的第R行、第C列开始,作为要写矩阵块的左上角,将数据用D分割写入文件。
2 c* c! l6 |* v0 f+ [, V. a其他用法有:
- f$ w7 W/ x$ w7 Adlmwrite('filename', M, 'attrib1', value1, 'attrib2', value2, ...)
6 T' ?- W1 u$ w$ e' g, ^dlmwrite('filename', M, '-append')
! ]$ l' o$ z- l5 V$ Edlmwrite('filename', M, '-append', attribute-value list)9 j! B, F5 k4 B. a% D) j
: d/ e! z) c {. K& l: ^& W例如:
8 z7 Q o$ p0 M1 ?a = [1 2 3; 4 5 6; 7 8 9];7 W8 d) a9 K* G9 I( E8 ]) h
dlmwrite('test.txt', a);
% u- [) c7 G+ t% n) q4 y h7 y+ ~ @3 }+ Z8 ^
则test.txt中的内容为:
+ I* u8 B$ l/ I: S8 \+ X1,2,3# y! ]. j3 ^& A: t
4,5,6
5 Z) e! M$ _5 N7,8,92 r+ d4 W0 f t7 ~- c
9 {1 z- O) q, Z0 G8 b Y) U. X而使用save% a6 u) q! z/ ~0 z2 M
a = [1 2 3; 4 5 6; 7 8 9];
3 L+ _+ j3 O" Msave 'tst.txt' a -ascii;文本文件里的内容为:3 b, N$ l& ?- R$ Q
1.0000000e+000 2.0000000e+000 3.0000000e+000% B( \* S$ b+ z, w' [2 d
4.0000000e+000 5.0000000e+000 6.0000000e+000
" N2 {9 m: u9 H( | 7.0000000e+000 8.0000000e+000 9.0000000e+000
D5 G# O c I! z
' |$ O" M! L8 a3 n* s& B w
2 s1 C9 i+ {. l3.xlswrite 写入excel) g0 d1 A6 p( T2 u
( D/ R1 e. T: V% w" o
4.fprintf和dlmwrite区别
4 v1 N- Q3 U6 v6 x6 V: K4 K2 W+ ]4 D+ y$ M
MATLAB在图像处理中的应用,实际是对图像矩阵的操做运算,MATLAB在图像处理中的常用的命令有:
$ [; C$ M( S) i* rimread(): 从图像文件夹中读取图像的函数;
/ U- x! o/ l3 S$ iimwrite(): 输出图像的函数;
6 P0 p9 M) _! _. S, H% E# V1 p3 n$ {imshow(), image(): 图像显示于屏幕的函数;
}1 S x' E0 {8 ] qimcrop(): 对图像进行裁剪的函数;;0 p* ^; R7 ^* L! e3 m( V
imresize(): 实现对图像的插值缩放的函数;
6 U) g' {) b+ F, m5 aimrotate(): 用实现对图像的旋转。 { ` n8 @% o- Y: W5 c: v2 K% B
im2double(),double(): 将图像数组转化为double类型;3 F7 ~* [, M' R: T3 V0 m) n
im2uint8(),uint8(): 将图像数组转化为uint8类型;
5 A( J' S$ e7 v6 H& W7 s. uim2uint16(),uint16(): 将图像数组转化为uint16类型;6 ^, w/ o' ]/ r; E+ L! D
关于上述的命令使用方法可以参考一些MATLAB方面的书籍或者用MATLAB自带的帮助(help or doc)命令.! }- Y8 E- l, Z1 y& r5 H' X
如 我想知道dwt2()命令的使用方法 可以执行下面的命令3 ?0 B- m* @" {& i/ m( N
>> help dwt2 或 >>doc dwt2
+ R7 \* M" T( U& Q- U系统就会告诉你它的使用要求和方法,如果系统说找不到对应的帮助文件,那就可能是你装的MATLAB里面没有这个命令,那很可能这个命令就不能使用.+ b9 h4 I/ Q6 O, z( M
在图像数组的输出到文件的操作上,我发现fprintf比dlmwrite明显快很多,但这两个输出的数据格式有些差别,见下面操作:
2 J T' Q. d. t7 U9 A# w; D>> a=[1 2 3;4 5 6;7 8 9]: q# p! e( @# C% n: `" O9 \6 T: |$ A
a =8 S7 `8 F; K" E1 \+ Y
1 2 33 F8 M7 O: n' d7 v' k& e7 y
4 5 6
$ f. J j0 C: o4 q$ S9 Z2 T% k6 z 7 8 9
4 z. L5 `0 i5 b* Z) l, Q' p2 e>>fid = fopen('exp.txt','w');
& S5 D* b8 ^( i7 p( A! J% `4 gfprintf(fid,'%2.0fn',a);" v* n$ F; T( ?. h
fclose(fid);
% ^9 |' f( U0 y4 u/ s
5 S8 I/ F' N( D2 X>> type exp.txt
6 Y) _' u( z7 y
, J* ?* H C2 ]1 Z5 k) N( w! t1
5 z3 Z3 ~- s M5 ?6 s4
/ T" N$ {3 \( M- j S! z7
4 r' X7 o. e* q1 s( ~: [4 x- D$ ^2* F4 B" X3 T1 ~/ T! m# S
5
- r; a& d5 ]/ I( F4 b8
& k; Q! B9 G4 r0 b31 Y# N- f* i/ U% H) Z) K
6
6 {8 j w4 E) m# n2 H92 v/ I/ [( P4 `% T' C8 T! z4 O q
fprintf输出是一列一列的从左到右输出。7 }3 v; ^# m7 y) f# [5 S
>> dlmwrite('eg2.dat',a,'n');
& }% w7 x2 i6 g+ \>> type eg2.dat2 k4 a0 G! i, \; B
15 {$ F3 s! O/ z
2
K' j8 y3 U1 x& b" b0 G! `/ O3
/ f4 Q# N) v3 w8 r- c( X4
- ?+ J. T3 M9 }' l! l( n3 L5
. _% S1 ]* g P* X& |66 V3 W* q& ^! I5 q8 ?
75 V$ z; E' ?) u% b" S, h
8
* a& h! C( r0 P! q2 B! z' O90 Q, K a+ x; e' y
dlmwrite输出是一行一行的从上到下输出。! P9 o3 {0 Q, {- l1 H5 P
下面是一个比较简单的图像处理程序:
5 `. X7 H6 g. x7 i8 e) }+ ?- bclear;%清除当前工作区所有变量0 L) I% j3 ^1 b% c$ e
data=imread('E:2D前处理eg1.bmp');%从图像文件夹中读取图像eg1.bmp
' L) R# Q0 ]* y; X4 t; udata=double(data);%将图像数组data转化为double类型
, ]" z, F. o* W0 K" w6 R9 Z[x,y]=size(data);%求数组大小,x是data数组有多少行,y是data数组有多少列( u" F- Q: }6 ^
data1=imresize(data,[x,y*2/1.732]);%实现对图像的左右插值放大2/1.732倍/ b! U) {7 D* w# I7 ]
[x,y]=size(data1);%%求放大后图像数组大小
0 x( H) z$ h1 \. g/ H2 ]fid = fopen('E:2D前处理Particletest.dat', 'wt');%打开图像数组的将要输出到文件! h0 X' u& W2 } U# x! G
fprintf(fid, '%2.0ft%2.0fn', x, y);%输出x,y值5 |8 N8 O0 N( s( a" O
fprintf(fid, '%2.0fn', data1);%输出图像数组数据) M( H" C6 q# L& o; ^0 D
fclose(fid);%关闭文件指针: R7 m3 m1 K4 e9 {/ I7 o
' @, o" g. V! y& R6 L0 d9 g$ u1 W
|
|