matlab实现图像的简单裁剪

在数字图像处理问题当中,为了缩小图像尺寸从而减轻后续处理的难度,通常需要对原图像进行一定尺寸的剪裁,以缩小处理范围。
数学建模问题中,如果涉及到关于从图像中获取信息的问题,就不可避免地要进行图像剪裁,在MATLAB当中,有着比较完善的自带函数对图像进行剪裁,下面我拿一个简单的例子进行介绍。
如下
matlab实现图像的简单裁剪_第1张图片

下面我要将它的头部进行一定的裁剪。
首先介绍一下用到的几个函数:(其中变量统一用以下标识)

  1. 读取图片文件:A0 = imread(“imgName”); %imgName是图像的名称,带扩展名,如果在当前文件夹下可以不用写全路径
  2. 用一个figure窗口展示读取的图片:imshow(A0);
  3. [x0, y0] =ginput(2); %通过鼠标点击获得两个点的坐标,存储在x0, y0里面,其中x0, y0 都是二元数组,x0存储着两个点的横坐标信息,y0为纵坐标信息。当然,也可以获取n个点的坐标存储在[x0, x1, x2, …,xn-1]里面
  4. A1 = imcrop(A0, [x0(1), y0(1), abs(wide), abs(hight)]); %对图片进行一定尺寸的剪裁,其中x0(1), y0(1)就是起始点的横纵坐标,和以上2中变量一致,而
    wide =abs(x0(2) - x0(1));
    hight = abs(y0(2) - y0(1));
    表示从起始点到终点的距离,通俗说也就是剪裁后图片的长和宽。
  5. 保存图片:imwrite(A1, name); 其中name是一个字符串,表示你要保存的图片的名字(包括扩展名)。

下面附上我的源码,为了便于学习,使用较多的m文件进行封装:
第1个m文件,读取并展示图片,
readImg.m


A = imread('img.png');
imshow(A);

第2个m文件,就是第3个文件里面使用的
getPoint.m

readImg;
[x0,y0] = ginput(2);
%x0 = 353 747  y0 = 77 391
% wide 394  hight  314
wide = abs(x0(2) - x0(1));
hight = abs(y0(2) - y0(1));
start1 = x0(1)
start2 = y0(1)
wide
hight

第3个m文件,读取,剪裁,并保存图片,这就是整个流程的主函数
cutAndSave.m


readImg;    %这里是另一个源文件,表示读取并用鼠标获取起始点和终点,下面会展示。没错,文件就在这里读取
getPoint;
A1 = imcrop(A, [x0(1), y0(1), abs(wide), abs(hight)]);
imshow(A1)

name = 'smallImg.jpg';
imwrite(A1, name);

这三个m文件就实现了图片的简单剪裁,效果以及相关数据如下
matlab实现图像的简单裁剪_第2张图片

关于MATLAB图像处理的更多知识,之后会慢慢介绍。
学到了就多多支持^ _ ^

你可能感兴趣的:(MATLAB)