使用np.full生成数组在OpenCV中显示异常,求原因解析
问题原因及解决办法
- 本质是两个函数生成的数组数据类型不一样:
np.zeros([512,512,3])默认产出float64类型数组,OpenCV 的imshow能正常处理这种类型——浮点型数组里的0.0会被识别为黑色,符合显示逻辑。np.full([512,512,3], 0)因为填充的是整数0,默认生成int64类型数组,而 OpenCV 的imshow对int64格式的图像支持有问题,没法正常渲染,所以窗口会瞬间消失。
- 你可以打印数组的
dtype属性验证:import numpy as np print(np.zeros([512,512,3]).dtype) # 输出 float64 print(np.full([512,512,3], 0).dtype) # 输出 int64 - 解决起来很简单,用
np.full时指定符合OpenCV要求的数据类型就行:
之后配合# 生成标准uint8格式的黑色图像(0-255范围) img = np.full([512,512,3], 0, dtype=np.uint8) # 或者保持浮点型,填充0.0也能正常显示 img = np.full([512,512,3], 0.0)cv2.imshow()和cv2.waitKey()就能正常显示窗口了。
内容的提问来源于stack exchange,提问作者varun
相关产品推荐
相关产品推荐

