如何解决YOLOv7实例分割中cv2.resize的Bad argument错误?
YOLOv7实例分割cv2.resize报错解决
问题原因
报错提示src is not a numpy array,说明processFrame(image)返回的结果不是OpenCV能处理的numpy数组格式——可能是返回了None、PIL图像、PyTorch张量等非numpy类型数据。
解决步骤
1. 确认processFrame的返回类型
先打印返回值的类型和内容,定位问题:
image_display = processFrame(image) print(type(image_display), image_display) # 新增调试代码
根据打印结果对应处理:
- 如果是PIL图像,转成numpy数组:
from PIL import Image import numpy as np image_display = np.array(processFrame(image)) - 如果是PyTorch张量,转成numpy数组并调整维度/范围:
# 假设张量格式为[C, H, W],转成[H, W, C]的numpy数组 image_display = processFrame(image).permute(1, 2, 0).cpu().numpy() # 若张量做了归一化(值在0-1之间),还原到0-255的uint8格式 image_display = (image_display * 255).astype(np.uint8) - 如果返回None,检查processFrame函数内部逻辑,确保它能正确输出处理后的图像。
2. 增加类型校验(可选但推荐)
在resize前添加断言,提前发现类型问题:
image_display = processFrame(image) assert isinstance(image_display, np.ndarray), f"processFrame返回类型错误:预期numpy数组,实际为{type(image_display)}" image_display = cv2.resize(image_display, (img_size[1], img_size[0]))
3. 修正通道顺序(避免颜色异常)
因为代码中把图像转成了RGB格式,而OpenCV的imwrite和imshow默认使用BGR,所以处理后要转回来:
image_display = cv2.cvtColor(image_display, cv2.COLOR_RGB2BGR)
内容的提问来源于stack exchange,提问作者tugba
相关产品推荐
相关产品推荐

