尽管关于元组有很多问题,但我还没有找到合适的方法。
我使用python和OpenCV。我想初始化一张黑色图像,它与我正在处理的另一个图像大小相同。我在一个函数中这样做。所以我的功能看起来像这样:
def myfunc(size):
nsize = [];
nsize.append(size[0])
nsize.append(size[1])
nsize.append(3);
black_img = np.zeros(nsize,np.uint8)
当我打电话时,我称之为
myfunc(base_image.shape)
在我的函数中,我创建了一个新列表(因为shape给出了一个不可变的元组)并附加了size和3的值,它代表了opencv图像中的通道数。
这是正确的方法吗?还是有另一种扩展元组的方法吗?
答案 0 :(得分:1)
你可以这样做:
black_img = np.zeros(size + (3,), np.uint8)
答案 1 :(得分:1)
由于元组是不可变的,所以你不能“扩展”一个元组,但你可以通过连接两个或多个元组来创建一个新的元组:
>>> t1 = (1, 2, 3)
>>> t2 = (0, 0, 0)
>>> t = t1 + t2
>>> t
(1, 2, 3, 0, 0, 0)
答案 2 :(得分:1)
当可以在一行中完成时,无需编写四行代码
您可以将图像的形状原样传递给np.zeros()
:
new_image = np.zeros(old_image.shape, np.uint8)
您还可以使用np.zeros_like()
:
im = cv2.imread('apple.png', 1)
im.shape
Out[213]: (369, 369, 3)
black = np.zeros_like(im)
black.shape
Out[215]: (369, 369, 3)