获取“需要整数(获取类型元组)”错误,使用cv2绘制矩形

2024-04-20 11:27:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经编写了一个基本的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)

有人能帮忙吗


Tags: 代码图像imageimportnumpyimgnew网站
3条回答

找到了解决办法。谢谢@Martijn Pieters

import cv2
import numpy as np
from PIL import Image

img = Image.new('RGB', (800, 900), color= (171, 183, 255))
open_cv_image = np.array(img) 

cv2.rectangle(open_cv_image,(0,0),(800,900),(0,0,0),30)
img2 = Image.fromarray(open_cv_image, 'RGB')

在某些情况下,OpenCV需要使用UMat类包装图像

img = Image.new('RGB', (800, 900), color= (171, 183, 255))
open_cv_image = np.array(img) 
image = cv2.UMat(open_cv_image).get()
cv2.rectangle(open_cv_image,(0,0),(800,900),(0,0,0),30)

cv2模块将numpy数组作为映像使用,而不是使用PIL{}实例

因为cv2.rectangle实现和Image类型都是完全在编译代码中实现的,所以回溯对于理解出错的地方并没有多大帮助。在后台,本机cv2.rectangle()代码尝试访问image对象上需要整数但cv2.rectangle()在元组中传递的内容,因为它希望与numpy数组交互

如果您想要的只是一张RGB颜色一致的空白图像,请创建一个numpy阵列,将形状(宽度、高度、3)和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)

相关问题 更多 >