Matlab随意选择图片的某一部分单独显示 可截取封闭多边形成图 [1]案例提供2种方案,一种是读取数据成高清图后再截取,得到的依然是高清图 [2]另一种是读取现有的位图,截取后的图片依然是位图 matlab代码,根据自己需要修改即可 温馨提示:联系请考虑是否需要,(Example_43)
在图像处理的世界里,常常会遇到需要单独显示图片某一部分的需求,尤其是截取封闭多边形区域形成新图。今天就来聊聊在Matlab中实现这些操作的两种方案。
方案一:读取数据成高清图后截取
这个方案的优势在于最终得到的依然是高清图。假设我们有一个数据文件,从中生成一幅高清图像,然后再对其进行截取。
% 生成数据 x = linspace(0, 2*pi, 1000); y = sin(x); % 绘制高清图像(这里以简单的正弦曲线为例,实际可能是更复杂的数据图) figure; plot(x, y, 'LineWidth', 2); axis tight; % 保存为高清图片(假设为 'high_res_image.png') print('high_res_image.png', '-dpng', '-r600'); % 读取高清图片 img = imread('high_res_image.png'); % 定义多边形顶点 poly_vertices = [100 200; 200 300; 300 250; 250 150]; % 创建掩码 mask = poly2mask(poly_vertices(:,1), poly_vertices(:,2), size(img, 1), size(img, 2)); % 应用掩码截取图像 cropped_img = img; cropped_img(~mask,:) = 0; % 显示截取后的图像 figure; imshow(cropped_img);在这段代码中,我们首先生成了一些数据(这里是简单的正弦曲线)并绘制为高清图像保存。接着读取该高清图片,定义了多边形的顶点坐标。通过poly2mask函数创建了与图像大小匹配的掩码,这个掩码在多边形内部为1,外部为0。最后将掩码应用到图像上,非多边形区域设置为0,就得到了截取后的图像并显示出来。
方案二:读取现有的位图截取
这种情况下,截取后的图片依然保持位图格式。假设我们已经有一张位图图片。
% 读取位图 bitmap_img = imread('bitmap_image.jpg'); % 定义多边形顶点 poly_vertices = [50 100; 150 180; 200 120; 120 80]; % 创建掩码 mask = poly2mask(poly_vertices(:,1), poly_vertices(:,2), size(bitmap_img, 1), size(bitmap_img, 2)); % 应用掩码截取图像 cropped_bitmap_img = bitmap_img; cropped_bitmap_img(~mask,:) = 0; % 显示截取后的位图图像 figure; imshow(cropped_bitmap_img);这里代码逻辑和方案一类似,只是一开始读取的是已有的位图图片。同样定义多边形顶点,创建掩码并应用到图像上,完成截取并显示。
这两种方案各有千秋,根据实际需求来选择。如果对图像质量要求高,方案一是个不错的选择;若只是处理常规的位图且对格式没有转换要求,方案二就很合适啦。记得在实际应用中根据自己的具体情况调整代码哦,就像温馨提示里说的,结合自身需求考虑是否需要进一步优化,比如(Example_43)那样,不过具体还是得看实际场景咯。