解释 cv2.imencode 结果

mrg*_*oom 2 python jpeg opencv

代表返回的缓冲区是什么cv2.imencode

这是 1x1 像素图像的示例。

import cv2
impor numpy as np

img= np.zeros((1,1,3),np.uint8)
en= cv2.imencode('.jpg',img)
print type(en)
<type 'tuple'>
print en[1].shape
(631, 1)
Run Code Online (Sandbox Code Playgroud)

由于某种原因,当图像大小改变时,缓冲区的大小没有改变:

img= np.zeros((10,10,3),np.uint8)
en= cv2.imencode('.jpg',img)
en[1].shape
(631, 1)
Run Code Online (Sandbox Code Playgroud)

更新:它有不同的尺寸以获得更大的图像。

img= np.zeros((1000,1000,3),np.uint8)
en= cv2.imencode('.jpg',img)
en[1].shape
(16503, 1)
Run Code Online (Sandbox Code Playgroud)

使用随机数据:

img= (np.random.rand(1,1,3)*255).astype(np.uint8)
en= cv2.imencode('.jpg',img)
en[1].shape
(634, 1)

img= (np.random.rand(10,10,3)*255).astype(np.uint8)
en= cv2.imencode('.jpg',img)
en[1].shape
(899, 1)

img= (np.random.rand(1000,1000,3)*255).astype(np.uint8)
en= cv2.imencode('.jpg',img)
en[1].shape
(1175962, 1)
Run Code Online (Sandbox Code Playgroud)

Zda*_*daR 5

根据cv2.imencode文档

注意:cvEncodeImage 返回 CV_8UC1 类型的单行矩阵,其中包含作为字节数组的编码图像。

所以基本上输出取决于您定义的图像格式.png.jpg等等,每种格式都有它自己的序列化约定并且cv2.imencode正是这样做的。它还包含一些与该图像格式相关的元数据,例如:压缩级别等以及像素数据。

  • 这并没有使它变得更清楚。结果是二维的,这很奇怪。我只想获取一个字节对象,将其包含在要通过网络写入的较大消息中,然后由非 python 程序转换为图像。 (7认同)