标题Matlab剪裁图片,提取感兴趣部分
问题描述
当需要从一幅图片中提取一些感兴趣的内容时,比如一些细小的文字、图案等,如果从整个图片中直接提取,必然会大大增加计算量,导致处理时间很长,而且多数计算都是无效计算,进而非常消耗资源…
解决办法
从原始图片中剪裁出包含目标信息的区域,使得区域尽可能小,背景尽可能单一,这样可以大大提高图像处理工作的效率。
解决方案
数据载入
filepath = uigetdir('E:\目标文件夹', '对话框标题');
fsep = filesep; % Windows:\ Linux:/
imageFilePath = strcat(filepath, fsep); % 图片路径
% 创建Sub1、Sub2文件夹,用于保存剪裁后的图片
filepathLength = length(filepath);
filePathSub = filepath(1:(filepathLength - 10)); % 10为目标图片所在文件夹的文件夹名称字符长度,这里是为了将sub1和sub2两个文件夹与目标图片文件夹建立在同一级目录下
mkdir([filePathSub, 'Sub1']); % 在filePathSub路径下创建文件夹Sub1
mkdir([filePathSub, 'Sub2']);
filePathSub1 = strcat(filePathSub, 'Sub1\');
filePathSub2 = strcat(filePathSub, 'Sub2\');
剪裁、写图片
imagePathList = dir(strcat(imageFilePath, '*.jpg'));
len = length(imagePathList);
for i = 1 : 1 : len
image_name = strcat(imageFilePath, num2str(i));
image_name = strcat(image_name, '.jpg');
img = imread(image_name);
% 下面参数为[X_min, Y_min, Width, Height]分别表示原始图片的左下角坐标x、y以及截取区域的宽度width和高度height
imgSub1 = imcrop(img, [0, 30, 200, 50]);
imgSub2 = imcrop(img, [210, 0, 270, 75]);
image_nameSub1 = strcat(filePathSub1, num2str(i));
image_nameSub1 = strcat(image_nameSub1 , '.jpg');
imwrite(imgSub1, image_nameSub1, 'ipg');
image_nameSub2 = strcat(filePathSub2, num2str(i));
image_nameSub2 = strcat(image_nameSub2 , '.jpg');
imwrite(imgSub2, image_nameSub2, 'ipg');
end