python - np.ones 更改为元组,并且 np.asarray 没有修复它
问题描述
我正在制作一个使用 OpenCV 3.6 从图像中屏蔽文本的函数,并且在我的masked
数组中使用时出现错误,我的数组被转换为元组function
我的脚本看起来像这样,我删除了获得坐标的部分。在 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]]]
但是当我在其中使用mask
它时,function
它是一个元组,因此在使用原始图像进行遮罩时它不起作用并且当我打印时它看起来像这样:
(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
我不知道它为什么会这样,我也找不到解决它的方法。
解决方案
在您的函数定义中,您有
def function(image, *mask):
具体来说,您已将其定义 *mask
为参数。*
参数前面的实际上mask
是 python 的特殊语法,这意味着您可以将可变数量的参数传递给您的函数。
该函数将所有这些参数包装到一个名为的元组mask
中 - 这就是您出错的原因。
欲了解更多信息,请阅读此处。
要修复,只需执行
def function(image, mask):
推荐阅读
- java - 使用 EventQueue.invokeLater 有什么问题?
- javascript - 无法使用 Redux 表单获取表单的更新值
- crafter-cms - Crafter 交货安全
- performance - 从源代码构建 tensorflow-gpu 的预期性能提升
- blueprism - 我可以让 Blue Prism 读取基于关键术语的搜索引擎结果吗?
- angular - 在 Angular 中动态创建和删除组件
- git - Bonobo GIT 中的 Windows 身份验证重新加载登录页面
- c# - 更新类的外键
- java - Java::JavaSql::SQLException:侦听器拒绝连接并出现以下错误
- javascript - 不再悬停时取消悬停动作?