1.编写 M 文件。
用过 Matlab 的人应该都接触过 M 文件,在 Matlab 中编辑 M 文件的方法就是在命令窗口输入 >> edit filename ,我看的第一本 Matlab 的书没有教这个,特别说一下。
>> edit imgReadShowSave
下面代码中的图片我放在工作目录下的 Bitmap 文件夹下。
2.对图像的读写,显示和保存的基本操作
%% 图像的读写,显示保存
% 作者:杨宇东
% 日期:2014.09.22
% 参数:无
% 输出:无
%%
function imgReadShowSave
% 源图片文件名
imgFile = 'Bitmap/1.bmp';
% 新的普通 JPG 格式文件名
newNormalJPGFile = 'Bitmap/newNormalJPGFile.jpg';
% 新的高品质 JPG 格式文件名
newHighQualityJPGFile = 'Bitmap/newHighQualityJPGFile.jpg';
% 新的低品质 JPG 格式文件名
newLowQualityJPGFile = 'Bitmap/newLowQualityJPGFile.jpg';
% 新的 PNG 格式文件名
newPNGFile = 'Bitmap/newPNGFile.png';
fprintf('读取 BMP 图像中...\n');
% 通过 imread 函数将图片文件读入到 img 数组中, img 为三维数组, 分别为纵坐标像素、横坐标像素、 RBG 颜色
img = imread(imgFile);
fprintf('显示 BMP 图像中...\n');
% 在 Matlab 窗口中显示图片
imshow(img);
fprintf('写入 BMP 图像中...\n');
% 将 img 数组写入文件中
imwrite(img, newNormalJPGFile);
% 更常用但仅适用用 JPEG 图像的语法: imwrite(img, filename, quality, q) ,其中 q 是介于 0 到 100
% 的整数(指 JPEG 图像的质量,缘于 JPEG 压缩, q 越小,图像的压缩比越大,质量越差)
imwrite(img, newHighQualityJPGFile, 'quality', 100);
imwrite(img, newLowQualityJPGFile, 'quality', 0);
% 将 img 数组写入文件中
imwrite(img, newPNGFile);
3.图像的局部剪切和替换
%% 图像的局部图像剪切,替换
% 作者:杨宇东
% 日期:2014.09.22
% 参数:无
% 输出:无
%%
function imgCutReplace
% 源图片文件名
imgFile = 'Bitmap/1.bmp';
fprintf('读取 BMP 图像中...\n');
img = imread(imgFile);
% 获取 img 数组的大小, imgSize 为三维,分别为纵坐标大小、横坐标大小、 RBG 颜色
imgSize = size(img);
fprintf('截取一半的图片\n');
% 将图片截取一半
% 纵坐标截取一半的向量
fr = 1:1:imgSize(1)/2;
% 横坐标截取一半的向量
fc = 1:1:imgSize(2)/2;
% RGB 颜色的向量
frgb = 1:1:imgSize(3);
% 通过矩阵元素寻访实现,将 img 中由 fr 指定的行和 fc 指定的列交叉的元素取出来给 imgNew
imgNew = img(fr, fc, frgb);
% 显示图片
imshow(imgNew);
% 将 img 数组赋给新的 imgTemp 数组
imgTemp = img;
fprintf('用图片的左上角替换左下角\n');
% 图片的替换,将左下角内容替换为左上角的内容
% fnr 为要替换的纵坐标向量
fnr = imgSize(1)/2+1:1:imgSize(1);
% 通过矩阵元素寻访实现,将 imgNew 赋值给 imgTemp 中由 fnr 和 fc 指定的行和列交叉的元素,注意 A(fnr,fc,frgb)
% 的行列数应与 imgNew 相等
imgTemp(fnr, fc, frgb) = imgNew;
% 在新窗口中显示图片
figure, imshow(imgTemp);