上手 cv2 遇到的一些问题
cv2
的参数输入格式
cv2
全部改成了用 numpy.ndarray
作为图像处理格式。只是操作图像的时候:
- 数据类型必须是 uint8。
- 形状必须是
(H, W, C)
或者(H, W)
,后者为灰度图。 - 必须是连续的,必要时得用
np.ascontiguousarray()
转换一下(不然报错会很晦涩)。
如果使用训练模型用的张量转 numpy,一定要记得把批量维度去掉,并且转 channels-last 格式。否则 cv2 不能正常识别图像,并可能报错(报错信息晦涩难懂)。
此外,pillow 库的 Image 默认格式为 RGB,而 cv2 中图像的默认格式为 BGR,需要按需转换。
cv.imwrite()
cv2.imwrite()
是将 numpy 数组表示的图像写入到磁盘。
cv2.imencode()
cv2.imencode()
函数将 numpy 数组表示的图像编码成字节,尽管形式上还是 numpy 数组,但是应该使用 numpy 的 tobytes()
函数转换成字节,然后以二进制模式打开文件并写入。如果用 cv2.imwrite()
尝试写入这样的图像将报错。