首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python元组:需要一个整数(got类型TypeError)- (OpenCV / Numpy)

Python元组:需要一个整数(got类型TypeError)- (OpenCV / Numpy)
EN

Stack Overflow用户
提问于 2020-03-31 10:30:27
回答 2查看 1.2K关注 0票数 1

我知道周围有很多类似的问题,但这些问题似乎都不能解决我的问题。这就是为什么我决定创建另一个帖子。

首先,以下代码的基本思想是,它将检测特定坐标的像素值,以便创建具有相同颜色的矩形。

这是我的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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)

即使使用"astype(int)“将值"R”、"G“和"B”转换为整数,我也会得到以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
image = cv2.rectangle(img, start_point, end_point, color, -1)
TypeError: an integer is required (got type tuple)

通过使用像30,53,100这样的数字作为颜色值,一切都很好。通过设置此图像中坐标的像素值,我收到的值似乎有问题。我真的不知道问题出在哪里,所以我很感谢大家的帮助!

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-31 10:54:37

我认为最简单的解决方案是使用color = (int(R), int(G), int(B))

问题是,即使使用pixel = img[start_point].astype(int)pixel的元素也是<class 'numpy.int32'>类型的,而不是int类型的。

票数 2
EN

Stack Overflow用户

发布于 2020-03-31 10:54:23

你自己回答了--你传递了numpy.int32类型,而他们期望的是int。对于人类来说是一样的,但是python很难处理所有可以相互转换的类型。你必须通过传递来帮助他们:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
image = cv2.rectangle(img, start_point, end_point, [int(x) for x in color], -1)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60948480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文