c++ - 如何使用 OpenCv 从图像中“切出”轮廓?
问题描述
我有图像 A、图像 B 和蒙版 M,它们都具有相同的尺寸。
我想在图像 A 上叠加图像 B。但是图像 A 中的某些区域要保持相同。这些区域已经在掩码内部被识别,因此只需将图像 B 中位于掩码轮廓内部的所有相应像素设置为透明即可。
换句话说,通过findContours
在遮罩中使用,我知道需要从图像 B 中删除的区域的轮廓,但我不知道内部点。
有谁知道是否可以执行上述操作?
编辑:使用 cv:FILLED 和 drawContours 用单一颜色填充这些区域,然后只复制具有这些颜色的像素。
解决方案
这类似于这个问题。使用此函数,您可以获得结果图像,假设您有一个二进制掩码:
def cmb(foreground,background,mask):
result = np.zeros_like(foreground)
result[mask] = foreground[mask]
inv_mask = np.logical_not(mask)
result[inv_mask] = background[inv_mask]
return result
推荐阅读
- amazon-web-services - 如何在模板中指定没有偏好的子网,如 Web 界面?
- javascript - 表单输入有效的进度条
- django - Django 模型寄存器
- java - 如何在改造请求的界面中设置参数
- assembly - 为什么 cmp 指令中的参数顺序很重要?
- c# - 外键 ID 转换(C# 到 SQL Server)
- angular - 分页器,排序和过滤器不适用于角度材料项目
- mongodb - 获取计数和文档详细信息
- python - 如何在 Pytorch1.1 & DistributedDataParallel() 中计算米?
- r - 如何在 R 中创建密度图矩阵