pat*_*ker 6 opencv image image-processing torch
我正在使用带有一些语义分割算法的 Torch 来生成分割图像的二进制掩码。然后我想根据该掩码裁剪图像。为了清楚起见,我需要在每个像素的基础上裁剪它。这似乎是一个简单的问题,但我能想到的唯一解决方案是反转draw maskCoco API 中的函数,或者迭代数组中的每个像素,并在不需要时将像素设置为黑色。我觉得有更好的方法可以做到这一点。Lua、Python、Go 或 C++ 中的库对我有用。有任何想法吗?
我已经在 Python 中实现了这一点,假设您将输入图像和蒙版用作 Mat 对象。鉴于 src1 是您的图像,而 src1_mask 是您的二进制掩码:
src1_mask=cv2.cvtColor(src1_mask,cv2.COLOR_GRAY2BGR)#change mask to a 3 channel image
mask_out=cv2.subtract(src1_mask,src1)
mask_out=cv2.subtract(src1_mask,mask_out)
Run Code Online (Sandbox Code Playgroud)
现在 mask_out 包含位于您定义的二进制掩码内的图像 src1 部分。
这是一个仅依赖于 numpy 的解决方案:
def get_segment_crop(img,tol=0, mask=None):
if mask is None:
mask = img > tol
return img[np.ix_(mask.any(1), mask.any(0))]
Run Code Online (Sandbox Code Playgroud)
现在执行get_segment_crop(rgb, mask=segment_mask)wherergb是一个形状为 (w,h,c) 的 ndarray,并且是一个形状为 (w,h)segment_mask的布尔 ndarray(即包含 True/False 条目),假设 w=width,h=height。
| 归档时间: |
|
| 查看次数: |
18860 次 |
| 最近记录: |