np.ones更改为元组,而np.asarray不修复i

2024-06-16 10:18:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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

我不知道它为什么会这样,也找不到解决办法


Tags: 图像image文本错误npfunctionmaskcv2
1条回答
网友
1楼 · 发布于 2024-06-16 10:18:27

在函数定义中

def function(image, *mask):

具体来说,您已经将*mask定义为参数。*参数前面的mask实际上是python的特殊语法,意味着您可以向函数传递数量可变的参数

该函数将所有这些参数包装到一个名为mask的元组中,这就是产生错误的原因

有关详细信息,请阅读here

要解决这个问题,只需

def function(image, mask):

相关问题 更多 >