np.ones изменяется на кортеж, а np.asarray не исправляет его - PullRequest
2 голосов
/ 07 октября 2019

Я делаю функцию, которая маскирует текст из изображения, используя 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' не поддерживает назначение элементов

Я не могу выяснить, почему это происходит, и я также не могу найти решение, чтобы это исправить.

1 Ответ

1 голос
/ 07 октября 2019

В определении вашей функции у вас есть

def function(image, *mask):

, в частности, вы определили *mask в качестве аргумента. * перед аргументом mask на самом деле является специальным синтаксисом для python и означает, что вы можете передать переменное число аргументов своей функции.

Функция упаковывает все аргументы этих тезисов в кортеж с именем mask - вот почему у вас есть ошибка.

Для получения дополнительной информации, прочитайте здесь .

Чтобы исправить, просто выполните

def function(image, mask):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...