python - 获取“需要整数(获取类型元组)”错误,使用 cv2 绘制矩形
问题描述
我编写了一个基本的 Python 代码来创建图像,然后在边界上放置一个矩形。这似乎不起作用。我检查了多个站点,这是他们使用的确切代码。不知道是什么问题。
import cv2
import numpy as np
img = Image.new('RGB', (800, 900), color= (171, 183, 255))
cv2.rectangle(img,(1,1),(800,900),(255,0,0),15)
img
我收到此错误
TypeError
<ipython-input-251-4b78f75077e8> in <module>()
4 img = Image.new('RGB', (800, 900), color= (171, 183, 255))
5 # cv2.rectangle(img, 0, 0, 800, 900, (255,0,0))
----> 6 cv2.rectangle(img,(1,1),(800,900),(255,0,0),15)
7 img
TypeError: an integer is required (got type tuple)
有人可以帮忙吗?
解决方案
该cv2
模块使用numpy 数组作为图像,而不是PIL
Image
实例。
因为cv2.rectangle
实现和Image
类型都是完全在编译后的代码中实现的,所以回溯对于理解问题所在并没有那么大的帮助。在底层,本机cv2.rectangle()
代码尝试访问图像对象上需要整数但cv2.rectangle()
传入元组的内容,因为它期望与 numpy 数组交互。
如果您想要的只是一个具有统一 RGB 颜色的空白图像,请创建一个形状为 (width, height, 3) 的 numpy 数组,并将您的 3 个波段设置为您喜欢的 RGB 值:
import numpy as np
# numpy equivalent of Image.new('RGB', (800, 900), color=(171, 183, 255))
img = np.zeros((800, 900, 3), np.uint8)
img[..., :] = (171, 183, 255)
然后将您的cv2.rectangle()
调用应用于该数组。
您始终可以使用以下方法在 PIL 图像之间进行转换:
# create numpy array from PIL image
nparray = np.array(img)
# create PIL image from numpy array
img = Image.fromarray(nparray)
推荐阅读
- css - Firefox 和 Vue 渲染错误 - 奇怪的条纹
- java - 将linkedlist的元素克隆到新列表
- node.js - 如何将 Node WPAPI 与 Wordpress.com(端点)一起使用?
- php - Laravel 8:缺少 [Route: edit.question] [URI: editquestion/{question}] [缺少参数:问题] 的必需参数
- enterprise-architect - Enterprise Architect 模型的脚本导出
- reactjs - 实时加载评论的问题
- xcode - macOS 无法使用证书从命令行签署可执行文件 larget,但从 Xcode 运行时成功
- java - 带有服务的 Java Spring 启动中的数学运算
- core-graphics - 在矩形中剪切路径以填充路径之间
- r - 使用牛顿拉夫森方法找到正数的根,R