图像处理—裁剪;获取灰度图;获取坐标点

matlab截取图像Ⅱ

欢迎来到!德莱联盟 应该是CSDN之bruderlung的博客!
你可以仔细阅读这篇文章,结合实例初步了解MATLAB的一些功能!

程序要求

  1. 建立循环函数,通过程序依此读取十幅原始图像,然后将原始图像转存为灰度图像

  2. 确定数码管所显示数字的四角坐标,然后将其依次输出

  3. 依据之前寻找到的四个坐标,将数字部分以外的图像设置为黑色;

  4. 在(3)的基础上,通过编写程序将数字部分转存为一个较小的图像(该图像的尺寸由步骤(3)中的四个坐标计算得到)。

建立循环函数

1
2
3
4
5
6
7
save_path='D:\picture\';    %获取图片所在位置
img_path_list = dir(strcat(save_path,'*.jpg')); %依次仅读取文件夹中的.jpg格式图片
img_num=length(img_path_list); %判断图片个数
for i = 1:img_num
picture_name = img_path_list(i).name; %获取图片的名称
picture_1 = imread(strcat(save_path,picture_name)); %1.建立循环函数依次读取原始图像
end
处理后效果:

原始图片

确定坐标

ginput函数
功能:允许用户以交互方式使用鼠标选定要裁剪的区域以此获取坐标点并以矩形方式裁剪

1
[x,y]=ginput(4);             %获取数码管所显示的数字的四角坐标,获取坐标时要按照左上,右上,左下,右下的顺序方式获取∵后面涂黑时有局限性

灰度图

1
picture_2=rgb2gray(picture_1);      %将24位原始图转为8位灰度图
处理后效果:

灰度图

背景设为黑色

1
2
3
4
5
6
7
8
9
10
11
12
picture_1 = imread(strcat(save_path,picture_name));        %1.建立循环函数依次读取原始图像
picture_2=rgb2gray(picture_1); %将24位原始图转为8位灰度图
picture_3 = picture_2;
%对除数字外的图像进行填充颜色
for m = 1:size(picture_3,1)
for n = 1:size(picture_3,2)
if n < x(1) || n > x(4) || m < y(1) || m > y(4) %不在矩形内的点变为黑色
picture_3(m,n,1) = 0;
end
end
end
imwrite(picture_3,[num2str(i+10),'.jpg']);
处理后效果:

背景变黑图

裁剪图片

imcrop函数
功能:用于返回图像的一个裁剪区域。可把图像显示在一个图像窗口中

1
picture_4 = imcrop(picture_2,[x(1),y(1),abs(x(1)-x(4)),abs(y(1)-y(4))]);     %对图像进行截取,(x1,y1)为数字左上角坐标,(x4,y4)为右下角的坐标。abs(x(1)-x(4))为x轴截取的长度,abs(y(1)-y(4))为y轴截取的长度。
处理后效果:

截取数字图

完整代码

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
42
43
44
45
46
%必读:获取坐标时需要用鼠标点击四次,分别为数字的四角,获取坐标时要按照左上,右上,左下,右下的顺序方式获取∵后面涂黑时有局限性
save_path='D:\picture\'; %获取图片所在位置
img_path_list = dir(strcat(save_path,'*.jpg')); %依次仅读取文件夹中的.jpg格式图片
img_num=length(img_path_list); %判断图片个数
for i = 1:img_num
picture_name = img_path_list(i).name; %获取图片的名称
picture_1 = imread(strcat(save_path,picture_name)); %1.建立循环函数依次读取原始图像
picture_2=rgb2gray(picture_1); %将24位原始图转为8位灰度图
%size(picture_2); %求出我的图像的大小
%s=1920
imshow(picture_2)
if i==1 %用if只需要确定一次图像中数字的四角坐标
[x,y]=ginput(4); %获取数码管所显示的数字的四角坐标,
imwrite(picture_2,[num2str(i),'.jpg']) %灰度图从01开始命名到10结束
picture_3 = picture_2;
%对除数字外的图像进行填充颜色
for m = 1:size(picture_3,1)
for n = 1:size(picture_3,2)
if n < x(1) || n > x(4) || m < y(1) || m > y(4) %不在矩形区域内的点变为黑色
picture_3(m,n,1) = 0;
end
end
end
imwrite(picture_3,[num2str(i+10),'.jpg']); %将涂黑的图片保存并从11开始命名到20结束
picture_4 = imcrop(picture_3,[x(1),y(1),abs(x(1)-x(4)),abs(y(1)-y(4))]);
imwrite(picture_4,[num2str(i+20),'.jpg']); %将截取的数字图像保存并从21开始命名到30结束
else
imwrite(picture_2,[num2str(i),'.jpg']); %灰度图从01开始命名到10结束
picture_3 = picture_2;
%对除数字外的图像进行填充颜色
for m = 1:size(picture_3,1)
for n = 1:size(picture_3,2)
if n < x(1) || n > x(4) || m < y(1) || m > y(4) %不在矩形区域内的点变为黑色
picture_3(m,n,1) = 0;
end
end
end
imwrite(picture_3,[num2str(i+10),'.jpg']); %将涂黑的图片保存并从11开始命名到20结束
picture_4 = imcrop(picture_3,[x(1),y(1),abs(x(1)-x(4)),abs(y(1)-y(4))]); %对图像进行截取,(x1,y1)为数字左上角坐标,(x4,y4)为右下角的坐标。abs(x(1)-x(4))为x轴截取的长度,abs(y(1)-y(4))为y轴截取的长度。
imwrite(picture_4,[num2str(i+20),'.jpg']); %将截取的数字图像保存并从21开始命名到30结束
end
end
[x,y] %矩阵中每一行依次为四点坐标
% 备注:1.刚开始if函数里面只写了[x,y]=ginput(4)但是运行后无法显示0的图像了,由于时间原因所以,就将处理的程序全部复制到i==1时里面
% 2.picture_1:24位rgb图象 3.picture_2: 8位灰度图 4.picture_3:黑色背景图
% 5.picture_4:数字提取图