Python TypeError: требуется целое число (полученный тип кортеж) - (OpenCV / Numpy) - PullRequest
1 голос
/ 31 марта 2020

Я знаю, что вокруг было много похожих вопросов, но ни один из них не помог мне. Вот почему я решил создать еще один пост.

Для начала основная идея следующего кода заключается в том, что он будет определять значение пикселя указанной c координаты, чтобы создать прямоугольник. с тем же цветом.

Это мой код:

# open image
img = cv2.imread("image.png")

# set coordinates for rectangle
start_point = (35, 39) 
end_point = (50, 60)

# get pixel value of start point; outputs something like "[132 42 52]"
pixel = img[start_point].astype(int) 
R = pixel[0]
G = pixel[1]
B = pixel[2]

# outputs type: "<class 'numpy.ndarray'> <class 'numpy.int32'> <class 'numpy.int32'> <class 'numpy.int32'>"
print(type(pixel), type(R), type(G), type(B))

# draws rectangle
color = (R, G, B)
image = cv2.rectangle(img, start_point, end_point, color, -1)

Хотя значения "R", "G" и "B" преобразуются в целые числа с помощью "astype (int ) "Я получаю следующую ошибку:

image = cv2.rectangle(img, start_point, end_point, color, -1)
TypeError: an integer is required (got type tuple)

При использовании чисел, таких как 30, 53, 100, в качестве значений цвета все работает отлично. Просто кажется, что проблема со значениями, которые я получаю, устанавливая значение пикселя координаты в этом изображении. Я действительно не знаю, где может быть проблема, поэтому я ценю любую помощь!

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 31 марта 2020

Я думаю, что самое простое решение - это color = (int(R), int(G), int(B)).

Проблема в том, что даже при использовании pixel = img[start_point].astype(int) элементы pixel имеют тип <class 'numpy.int32'>, а не тип int.

2 голосов
/ 31 марта 2020

Вы сами ответили - вы передали тип numpy.int32 и они ожидают int. Для людей это то же самое, но python с трудом справляется со всеми типами, конвертируемыми друг в друга. Вы должны помочь им, передав:

image = cv2.rectangle(img, start_point, end_point, [int(x) for x in color], -1)
...