我使用的是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,它在某些变体中支持大量通道,但我的印象是,这并没有被图像查看器广泛理解。