我想调整大小,特别是缩小遮罩(1和0的2D数组),以便低分辨率遮罩中Map到高分辨率遮罩(原始)中至少包含一个值1的一组像素的任何像素本身都将被设置为1(底部的示例)。
我已经尝试使用cv2.inter_MAX来使用cv2.resize(),但它返回了一个错误:
错误代码:OpenCV(4.6.0)/io/opencv/模块/imgproc/源代码/大小调整。cpp:3927:错误:(-5:参数错误)函数“resize”中的插值方法未知
它似乎没有枕头图像或scipy有一个插值方法这样做。
我正在寻找已定义shrink_max()的解决方案
>>> orig_mask = [[1,0,0],[0,0,0],[0,0,0]]
>>> orig_mask
[[1,0,0]
,[0,0,0]
,[0,0,0]]
>>> mini_mask = shrink_max(orig_mask, (2,2))
>>> mini_mask
[[1,0]
,[0,0]]
>>> mini_mask = shrink_max(orig_mask, (1,1))
>>> mini_mask
[[1]]
1条答案
按热度按时间gz5pxeao1#
我不知道有没有直接的方法,但可以尝试将遮罩缩小到一半大小,即每个低分辨率像素Map到4个原始像素(根据需要修改为任何比例):
在此处检查使用子矩阵:Numpy: efficiently sum sub matrix m of M
以下是用于收缩到任何所需形状的完整函数:
例如,
print(shrink_max(orig_mask, (2,1)))
会传回: