本文最后更新于:December 3, 2021 pm
MATLAB(矩阵实验室)是第四代高层次的编程语言和交互式环境数值计算,可视化和编程。由美国MathWorks公司开发的一种编程语言。用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。拥有众多的内置命令和数学函数,可以帮助您在数学计算,绘图和执行数值计算方法。
目录
显示文本中的数据
一.文本
1.导入数据
文本文件包括:CSV、TXT文件。
1.1从文本文件中读入表中(readtable函数)
- 使用方法
| t=readtable('文件名字+后缀名') t(1:3,1:3)
|
1.2 从文本文件中读取矩阵(readmatrix函数)
- 使用方法
1.3 从指定工作表和范围中读取矩阵(readmatrix函数)
在一个表格文件中含有多个表格时,可以使用。
- 使用方法
| opts = detectImportOptions('表文件名+后缀名');
preview('表文件名+后缀名',opts)
opts.Sheet='表名' opts.SelectedVariableNames=[i:j] opts.DataRange='i:j'; m=readmatrix('表文件名+后缀名',opts)
|
| opts = detectImportOptions('表文件名+后缀名');
m=readmatrix('表文件名+后缀名','Sheet','表名','Range','I:J')
|
1.4 从文件中读取元胞数组(readcell函数)
- 从文本文件中读取元胞数组
- 从表格中读取元胞数组
| c=readcell('文件名+后缀名')
# 从指定的工作表和范围读取元胞数组 opt=detectImportOptions('表文件名+后缀名'); m=readcell('表文件名+后缀名','Sheet','表名','Range','I:J')
|
2.导出数据
2.1 写入文本文件
- 将表导出到文本文件(writetable函数)
| Pitch = [0.7;0.8;1;1.25;1.5]; Shape = {'Pan';'Round';'Button';'Pan';'Round'}; Price = [10.0;13.59;10.50;12.00;16.69]; Stock = [376;502;465;1091;562]; T = table(Pitch,Shape,Price,Stock)
writetable(T,'tabledata.txt');
|
| rowNames = {'M4';'M5';'M6';'M8';'M10'}; T2 = table(Pitch,Shape,Price,Stock,'RowNames',rowNames)
writetable(T2,'tabledata2.txt','Delimiter','\t','WriteRowNames',true);
|
- 将元胞数组导出到文本文件(writecell函数)
| C = {'Atkins',32,77.3,'M';'Cheng',30,99.8,'F';'Lam',31,80.2,'M'} writecell(C,'data.dat')
|
- 方法二:(fprintf函数)
将数据写入一个文本中。也可以从一个文本中写入另外一个文件中。 | C = {'Atkins',32,77.3,'M';'Cheng',30,99.8,'F';'Lam',31,80.2,'M'}
fileID = fopen('mydata.dat','w'); formatSpec = '%s %d %2.1f %s\n';
[nrows,ncols] = size(C); for row = 1:nrows fprintf(fileID,formatSpec,C{row,:}); end fclose(fileID);
|
- 将数值数组导出到文本文件(writematrix函数)
| A = magic(5)/10 writematrix(A,'myData.dat','Delimiter',';')
|
二.图像
2.1 读取(imread函数)
- 读取和显示图像
| A = imread('图片名.jpg'); image(A)
|
- 将索引图像转换成RGB
| [X,cmap] = imread('名字.tiff');
imshow(X,cmap)
RGB = ind2rgb(X,cmap);
disp(['Range of RGB image is [',num2str(min(RGB(:))),', ',num2str(max(RGB(:))),'].'])
|
- 读取多页 TIFF 文件中的特定图像
| [X,map] = imread('corn.tif',3);
|
- 返回 PNG 图像的 Alpha 通道
| [X,map,alpha] = imread('name.png'); whos alpha
|
- 读取 TIFF 图像的指定区域
用表示要读取的区域边界的向量元胞数组指定 ‘PixelRegion’ 参数。第一向量指定要读取的行范围,第二向量指定要读取的列范围。
| A = imread('name.tif','PixelRegion',{[1,2],[2,5]});
|
2.2 读出(imwrite函数)
- 将灰度图像写入 PNG
将一个 50×50 的灰度值数组写入当前文件夹中的 PNG 文件。
| A = rand(50); imwrite(A,'myGray.png')
|
- 将索引图像数据写入 PNG
将索引图像数组和其关联的颜色图写入 PNG 文件。
| load clown.mat imwrite(X,map,'myclown.png')
|
- 用 MATLAB 颜色图写入索引图像
用 MATLAB 内置的颜色图 copper 将图像数据写入新的 PNG 文件。
| load clown.mat newmap = copper(81); imwrite(X,newmap,'copperclown.png');
|
- 将真彩色图像写入 JPEG
创建真彩色图像数据并将其写入 JPEG 文件。
| A = rand(49,49); A(:,:,2) = rand(49,49); A(:,:,3) = rand(49,49);
imwrite(A,'newImage.jpg','jpg','Comment','My JPEG file')
imfinfo('newImage.jpg')
|
- 将多个图像写入 TIFF 文件
将多个图像写入一个多页 TIFF 文件。
| im1 = rand(50,40,3); im2 = rand(50,50,3);
imwrite(im1,'myMultipageFile.tif') imwrite(im2,'myMultipageFile.tif','WriteMode','append')
|
- 写入 GIF 动画
绘制一系列图、将它们捕获为图像,然后写入 GIF 动画文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| x = 0:0.01:1; n = 3; y = x.^n; plot(x,y,'LineWidth',3) title(['y = x^n, n = ' num2str(n) ])
n = 1:0.5:5; nImages = length(n);
fig = figure; for idx = 1:nImages y = x.^n(idx); plot(x,y,'LineWidth',3) title(['y = x^n, n = ' num2str( n(idx)) ]) drawnow frame = getframe(fig); im{idx} = frame2im(frame); end close;
figure; for idx = 1:nImages subplot(3,3,idx) imshow(im{idx}); end
filename = 'testAnimated.gif'; for idx = 1:nImages [A,map] = rgb2ind(im{idx},256); if idx == 1 imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',1); else imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',1); end end
|
三.视频
3.1 读入
- 创建 VideoReader 对象并读取视频
| v = VideoReader('xylophone.mp4');
while hasFrame(v) frame = readFrame(v); end
whos frame
|
- 从特定时间开始读取视频帧
| v = VideoReader('xylophone.mp4');
v.CurrentTime = 2.5;
currAxes = axes; while hasFrame(v) vidFrame = readFrame(v); image(vidFrame, 'Parent', currAxes); currAxes.Visible = 'off'; pause(1/v.FrameRate); end
|
- 使用帧索引读取视频帧
| v = VideoReader('xylophone.mp4'); frame = read(v,1); frame = read(v,Inf); frames = read(v,[5 10]); frames = read(v,[50 Inf]);
|
- 使用帧索引和时间交替读取视频
| vidObj = VideoReader('xylophone.mp4'); vidObj.CurrentTime
frame20 = read(vidObj,20); vidObj.CurrentTime
while(hasFrame(vidObj)) frame = readFrame(vidObj); imshow(frame); title(sprintf('Current Time = %.3f sec', vidObj.CurrentTime)); pause(2/vidObj.FrameRate); end
|
3.2 读出
- 创建 VideoWriter 对象并写入视频
| A = rand(300);
v = VideoWriter('newfile.avi'); open(v) writeVideo(v,A) close(v)
|
- 为未压缩的 AVI 指定描述文件并写入视频
| v = VideoWriter('newfile.avi','Uncompressed AVI'); open(v)
A = imread('peppers.png'); writeVideo(v,A) close(v)
|
- 从动画创建 AVI 文件
| Z = peaks; surf(Z); axis tight manual set(gca,'nextplot','replacechildren');
v = VideoWriter('peaks.avi'); open(v);
for k = 1:20 surf(sin(2*pi*k/20)*Z,Z) frame = getframe(gcf); writeVideo(v,frame); end
close(v);
|