简体   繁体   中英

Python TypeError: an integer is required (got type tuple) - (OpenCV / Numpy)

I know that there have been many similar questions around, but none of those seem to work for my problem. That's why I decided to create another post.

To start off, the basic idea of the following code is that it will detect the pixel value of a specific coordinate in order to create a rectangle with the same color.

This is my code:

# 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)

Even though the values "R", "G" and "B" are converted into integers by using "astype(int)" I get the following error:

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

By using numbers like 30, 53, 100 as the color values everything works out perfectly fine. There just seems to be a problem with the values I receive by setting the pixel value of a coordinate in this image. I don't really know where the problem could be, so I appreciate every help!

Thanks in advance.

You answered yourself - you passed type numpy.int32 and they expect int . For humans it's the same, but python has a hard time handling all types convertible to one another. You have to help them by passing:

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

I think the simplest solution is using color = (int(R), int(G), int(B)) .

The issue is that even when using pixel = img[start_point].astype(int) , the elements of pixel are of type <class 'numpy.int32'> and not of type int .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM