You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在MATLAB中对图像多边形掩膜,仅保留内部并将外部设为黑色?

实现多边形外部区域置黑的掩膜处理方案

嘿,我来帮你搞定这个需求!你已经用insertShape画出了多边形,现在要把外部区域全部变黑,核心思路是先创建一个和原图匹配的二值掩膜,再用这个掩膜过滤原图——只保留多边形内部的像素,外部直接置黑。

下面是具体的实现步骤和完整代码:

步骤拆解

  1. 拆分多边形坐标:你的pos[x1 y1 x2 y2 ... xn yn]的格式,需要把x和y坐标分开提取,方便后续创建掩膜。
  2. 生成二值掩膜:用Matlab的poly2mask函数,把多边形坐标转换成和原图大小一致的二值掩膜——多边形内部为1,外部为0。
  3. 适配图像通道:如果原图是RGB彩色图,要把单通道的掩膜复制成3通道,保证和原图维度匹配。
  4. 应用掩膜:将原图和掩膜做元素相乘,掩膜为0的区域(外部)就会变成黑色,为1的区域(内部)保留原图像素。

完整代码示例

% 读取原始图像
i = imread('Vlc1.1.png');
% 你定义的多边形坐标
pos = [170 350 290 230 430 230 600 350 170 350];

% 1. 拆分x和y坐标:奇数位是x,偶数位是y
x_coords = pos(1:2:end);
y_coords = pos(2:2:end);

% 2. 创建二值掩膜:参数依次是x坐标、y坐标、图像高度、图像宽度
mask = poly2mask(x_coords, y_coords, size(i,1), size(i,2));

% 3. 适配RGB图像的3通道(灰度图可跳过此步)
if size(i,3) == 3
    mask = repmat(mask, [1 1 3]);
end

% 4. 应用掩膜,外部区域置黑
masked_image = i .* uint8(mask);

% 对比展示原图和处理后的图像
figure;
subplot(1,2,1); imshow(i); title('原始图像');
subplot(1,2,2); imshow(masked_image); title('掩膜处理后(外部置黑)');

关键细节说明

  • 确保你已经安装了Matlab的图像处理工具箱poly2mask是这个工具箱里的函数;
  • 如果你的原图是灰度图,直接去掉repmat那一行即可,因为灰度图是单通道,和掩膜维度一致;
  • uint8(mask)是把逻辑型的掩膜(0/1)转换成无符号8位整数,这样和原图(通常是uint8类型)相乘时不会出现类型不匹配的问题。

内容的提问来源于stack exchange,提问作者Jema

火山引擎 最新活动