OpenCV polylines函数报错:车道检测图像参数不兼容问题排查
修复OpenCV polylines的Bad Argument错误
错误根源
你的pred_bin_rgb最终是int64 dtype的ndarray,而OpenCV的cv2.polylines要求输入图像必须是uint8(或其他OpenCV兼容的数值类型)。问题出在变量定义的操作顺序:
pred_bin_rgb = pred_bin_batch[idx].repeat(3,1,1).cpu().numpy().transpose(1, 2, 0).astype(np.uint8) * 255
先执行astype(np.uint8)将数组转为0-255范围的无符号整数,再乘以255会导致数值溢出,NumPy会自动将数组dtype提升为int64以容纳溢出后的数值,最终生成的数组不符合OpenCV的参数要求。
修复方案
调整操作顺序,先乘以255再转换为uint8 dtype:
pred_bin_rgb = (pred_bin_batch[idx].repeat(3,1,1).cpu().numpy().transpose(1, 2, 0) * 255).astype(np.uint8)
操作逻辑:
- 先将0-1范围的预测值(假设
pred_bin_batch的元素是0或1的二进制值)放大255倍,得到0或255的数值 - 再转换为
uint8dtype,确保数组类型完全匹配OpenCV的要求
额外验证步骤
- 修复后打印
pred_bin_rgb.dtype,确认输出为uint8 - 确认
inst.astype(np.int32)的形状为(N,2)(每个元素包含x、y坐标),符合cv2.polylines对轮廓点的格式要求
内容的提问来源于stack exchange,提问作者Maria Li
相关产品推荐
相关产品推荐

