builtins.TypeError: Ожидается cv :: UMat для аргумента 'img' - PullRequest
0 голосов
/ 28 июня 2019
import cv2
import numpy as np
import pandas as pd

img = cv2.imread('image.png', cv2.IMREAD_COLOR)

grayscale = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

thresholded = cv2.threshold(grayscale, 0, 255, cv2.THRESH_OTSU)

cv2.imwrite("image.png", thresholded)

bbox = cv2.boundingRect(thresholded)

x, y, w, h = bbox

print(bbox)

foreground = img[y:y+h, x:x+w]

cv2.imwrite("foreground.png", foreground)

Это мой код для получения изображения и удаления из него черных пикселей. Я попытался найти решение для ошибки UMAT, которую я нашел здесь, в стеке, но затем он говорит «неправильное преобразование типов». Может ли кто-нибудь любезно помочь.

1 Ответ

0 голосов
/ 28 июня 2019

Проблема составляет thresholded в imwrite(), поэтому я использовал print(), чтобы увидеть (и сравнить вручную) thresholded с grayscale, который можно использовать с imwrite() без проблем.

grayscale - это массив, но thresholded имеет другую конструкцию - он выглядит как кортеж с двумя элементами - некоторым числом и массивом. Если я использую thresholded[1], тогда я получаю массив, который можно использовать с imwrite(), но я не проверял, что я получаю в "image.png"

import cv2
import numpy as np
import pandas as pd

img = cv2.imread('Obrazy/21586784_1642005829205281_8345912444787042013_o.jpg', cv2.IMREAD_COLOR)

grayscale = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
print(grayscale)

thresholded = cv2.threshold(grayscale, 0, 255, cv2.THRESH_OTSU)
print(thresholded[1]) # <-- [1]

cv2.imwrite("image.png", thresholded[1]) # <-- [1]

bbox = cv2.boundingRect(thresholded[1]) # <-- [1]

x, y, w, h = bbox

print(bbox)

foreground = img[y:y+h, x:x+w]

cv2.imwrite("foreground.png", foreground)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...