Pluto实践学习(一)
Matlab转换图片为二进制文件并读取验证
使用的Matlab函数(仅考虑此次用法)
- imread
官方文档:A = imread(filename) 从 filename 指定的文件读取图像,并从文件内容推断出其格式。如果 filename 为多图像文件,则 imread 读取该文件中的第一个图像。
说白了就是读取图片文件不做任何操作。 - fopen
打开文件,过于简单不再赘述。 - rgb2gray
官方文档:将 RGB 图像或颜色图转换为灰度图。
简述:变黑白图片,仅保留亮度信息 - fwrite
文件的写入,过于简单不再赘述。 - fclose
关闭文件,相对于fopen,过于简单不再赘述。 - fread
二进制文件的读取,过于。。。。。。 - reshape
官方文档:重构数组。
就是把矩阵的行和列改变一下大小,但是矩阵元素的数目不变,也就意味着这要求r*c(原来的行和列之积)等于r’*c’(改变后的行和列之积)。否则Matlab报错无法整除,就像这样:
- uint8
官方文档:Y = uint8(X) 将 X 中的值转换为 uint8 类型。超出范围 [0,28-1] 的值映射到最近的端点。
这算是把重构后的数组使用二进制存放在矩阵里了,应该算是转换图片为二进制文件的重要的一步。 - subplot
生成图像的摆放,过于easy。。。。赘述。 - imshow
展示图片(生成图像),过于easy。。。。赘述。
整体思路
在当前.m文件的文件夹里存放一张图片用于测试,首先用imread()函数读取该图片,再使用rgb2gray()把测试图转化为灰度图,把灰度图存放在一个新建的.bin文件(二进制文件)中。接下来是读取文件,使用fread()读取文件并存放在另一个矩阵中,注意此时fread()读取文件会存放为一行,所以后面就用reshape()重构数组,并且使用uint8()变成二进制存储,最后就可以直接imshow()咯。
代码
clc;clear;close all
%% 写图像
img = imread('1.jpg');
fileID1=fopen('test.bin','w');
A = rgb2gray(img);
fwrite(fileID1,A');
fclose(fileID1);
%% 读图像
fileID2=fopen('test.bin','r');
B=fread(fileID2);
fclose(fileID2);
B = uint8(reshape(B,690,[]))';
%% 绘图
figure
subplot(3,1,1)
imshow(img)
subplot(3,1,2)
imshow(A)
subplot(3,1,3)
imshow(B)
%%