OpenCV编码CHW(通道、高度、宽度)格式图像失败



我使用的是OpenCV python API,图像最初是HWC(默认情况下(,我使用

img = cv2.imread(image_path)
image_bytes = cv2.imencode(".jpg", img)[1]

它工作得很好,img变量是一个具有HWC(高度、宽度、通道(格式的ndarray,形状为[2224224,3]

然后,我将图像转换为CHW(通道、高度、宽度(格式,结果会是[3224224]ndarray,因为我的机器学习模型采用这种阵列形状,但模型在另一台机器上,所以我想使用编码来减小大小,但另一台机机是为纯粹的机器学习保留的,所以我不想在那台机器上进行转置,我想在解码后尽快得到我需要的ndarray。所以我用

img = img.transpose((2, 0, 1))
image_bytes = cv2.imencode(".jpg", img)[1]

并引发错误

Traceback:
File "..."
image_bytes = cv2.imencode(".jpg", img)[1]
cv2.error: OpenCV(4.1.0) /io/opencv/modules/imgcodecs/src/loadsave.cpp:871: error: (-215:Assertion failed) channels == 1 || channels == 3 || channels == 4 in function 'imencode'

图像编码支持CHW吗?如何正确操作?

没有正常(常规(图像格式支持CHW编码。它们几乎都是基于在最终维度中有1、2、3或4个通道来预测的,如下所示:

  • 1-通道:假定灰度或深度图
  • 双通道:灰度+alpha或灰度+深度贴图
  • 3通道:RGB或CMY
  • 4通道:RGBA或RGB+depthmap或CMYK

一个值得注意的例外是TIFF,它在某些变体中支持大量通道,但我的印象是,这并没有被图像查看器广泛理解。

最新更新