numpy cv2.rectangle抛出错误:(-215:Assert失败)cn < = 4 in function 'scalarToRawData'

0s0u357o  于 12个月前  发布在  Scala
关注(0)|答案(1)|浏览(399)

当我使用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)


谢谢你的回答!

ddarikpa

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

相关问题