上手 cv2 遇到的一些问题

cv2 的参数输入格式

cv2 全部改成了用 numpy.ndarray 作为图像处理格式。只是操作图像的时候:

  1. 数据类型必须是 uint8。
  2. 形状必须是 (H, W, C) 或者 (H, W),后者为灰度图。
  3. 必须是连续的,必要时得用 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() 尝试写入这样的图像将报错。