我正在使用opencv3.6制作一个函数,用于屏蔽图像中的文本,我有一个错误,在我的masked
数组中使用时,它被转换为一个元组
我的脚本是这样的,我去掉了获得坐标的部分。在for循环中,我想屏蔽原始图像中的文本
import cv2
import numpy as np
results = [(200, 200, 300, 300), (600, 500, 1000, 900)]
def function(image, *mask):
for(x1, y1, x2, y2) in results:
mask[y1:y2, x1:x2] = image[y1:y2, x1:x2]
return mask
image = cv2.imread('black.png')
masked = np.ones(image.shape, dtype=np.uint8) * 255
maskedText = function(image, masked)
cv2.imwrite("maskedText.png",maskedText)
我的蒙面阵看起来很正常:
[[[255 255 255]
[255 255 255]
[255 255 255]
...
[255 255 255]
[255 255 255]
[255 255 255]]]
但是当我在function
中使用mask
时,它是一个元组,因此在使用原始图像进行掩蔽时,它不起作用,当我打印时,它看起来是这样的:
(array([[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[255, 255, 255],
[255, 255, 255],
[255, 255, 255]]], dtype=uint8),)
np.asarray()
没有修复它,它只是保持原样,我不断得到错误:
mask[y1:y2, x1:x2] = orig[y1:y2, x1:x2] TypeError: 'tuple' object does not support item assignment
我不知道它为什么会这样,也找不到解决办法
在函数定义中
具体来说,您已经将
*mask
定义为参数。*
参数前面的mask
实际上是python的特殊语法,意味着您可以向函数传递数量可变的参数该函数将所有这些参数包装到一个名为
mask
的元组中,这就是产生错误的原因有关详细信息,请阅读here
要解决这个问题,只需
相关问题 更多 >
编程相关推荐