解决cv2.polylines无法画线以及列表转换为numpy数组无逗号的问题

使用python的cv2.polylines在图片上画出物体的运动轨迹时,遇到一些bug:

  1. ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (32,) + inhomogeneous part.
  2. cv2.error: OpenCV(4.9.:- 1: error:(-5:Bad argument) in function ‘polylines’
  3. cv2.polylines没有报错但是无法画线
  4. 列表转换为numpy数组无逗号

解决方法依次如下:

1. ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (32,) + inhomogeneous part.

将numpy版本降为1.23.0,使用命令:

pip install numpy==1.23.0

参考这个答案:网址

2. cv2.error: OpenCV(4.9.: -1: error:(-5:Bad argument) in function ‘polylines’

这个报错提示了函数polylines输入参数问题,我这里的问题是输入的坐标pts(array)格式有问题,原来的报错语句是:

my[bbox[4]].append([int((bbox[0] + bbox[2]) / 2), int((bbox[1] + bbox[3]) / 2)])

修改为正确的语句为:

my[bbox[4]].append([[int((bbox[0] + bbox[2]) / 2), int((bbox[1] + bbox[3]) / 2)]])

3. cv2.polylines没有报错但是无法画线

这个问题如果初次遇到还不太好找原因,因为它没有给出如何报错信息。但我这里无法画线的原因是因为输入的参数pts有点小问题。
正常的输入参数格式应该为:

pts = np.array([[40,300],[54,378],[60,420],[30,333]],np.int32)

但是我用print打印出来的坐标结果却是这样的:

[[[1556   637]]

 [[1556   638]]

 [[1556   643]]]

显然问题出现在numpy数组的格式不太对,没有逗号。

# 原先导致没有逗号、不能划线的代码语句:
pts = np.array(my[bbox[4]], dtype=object).astype(np.int64)

# 正确修改后:
pts = []
pts.append(np.array(my[bbox[4]], dtype=object).astype(np.int64))

正确修改后的输出打印结果为:

[array([[[1556,  637]],

       [[1556,  638]],

       [[1556,  643]]], dtype=int64)]

4. 列表转换为numpy数组无逗号

除了bug3的解决方式可以使得numpy转换后的输出有逗号外,如果你只是想在print打印结果中显示出逗号,那么可以参考这个方法:
网址1
网址2

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值