当我使用cv2.rectangle函数向我的图像添加bboxes时,我不能解决这个错误。我真的不明白这个错误是从哪里来的。
下面是我的代码:
for cord in cords:
pt1, pt2 = (cord[0], cord[1]) , (cord[2], cord[3])
pt1 = int(float(pt1[0])), int(float(pt1[1]))
pt2 = int(float(pt2[0])), int(float(pt2[1]))
print('pt1 et pt2')
print(pt1,pt2)
print(im.shape)
bgr = (0,0,255)
im = cv2.rectangle(im, tuple(pt1), tuple(pt2), color=(255,255,0))
字符串
这是输出的结果:
pt1 et pt2
(1, 206) (17, 223)
(3, 500, 500)
型
谢谢你的回答!
1条答案
按热度按时间ddarikpa1#
它抱怨你传递的图像有太多的通道。它期望四个或更少。它还期望颜色通道是第三个/最后一个维度,或者图像是灰度的(没有颜色维度)。
如果是
im.shape == (3, 500, 500)
,那么你就把尺寸排序错了。OpenCV需要HWC,但你有CHW。
使用
im = im.transpose((1, 2, 0))
,然后您可以使用OpenCV的绘图功能。如果OpenCV在这之后抱怨,你可能需要调用
im = np.ascontiguousarray(im)
。这是因为numpy可以使用stride技巧进行转置(以避免复制数据),但OpenCV不能对这样的数组建模。要将HWC转换回CHW,请使用
im = im.transpose((2, 0, 1))