python - 在 Go 中读取图像文件与在 Python 中读取图像文件
问题描述
我有用 Python 编写的代码,它使用PIL
库读取图像文件,并将其转换为 n 维 numpyuint8
值数组:
def load_image_into_numpy_array(image):
(im_width, im_height) = image.size
return np.array(image.getdata()).reshape((im_height, im_width, 3)).astype(np.uint8)
image_raw = Image.open(img)
image = load_image_into_numpy_array(image_raw)
一旦我尝试打印从 到 的像素值image[0][0][0]
,image[9][0][0]
我会得到以下输出:
image[0][0][0] = 51
image[1][0][0] = 51
image[2][0][0] = 47
image[3][0][0] = 40
image[4][0][0] = 38
image[5][0][0] = 48
image[6][0][0] = 65
image[7][0][0] = 81
image[8][0][0] = 94
image[9][0][0] = 89
image[10][0][0] = 84
在 Go 中,我通过调用ioutil.ReadFile
函数读取图像,并通过调用 Go 的 Tensorflow API 将其转换为 Tensor,如下所示:
b, err := ioutil.ReadFile(imagePath)
if err != nil {
return nil, err
}
tensor, err := tf.NewTensor(string(b))
if err != nil {
return nil, err
}
一旦我通过 a 运行这个张量tf.Session
以便我可以将它的值转换为uint8
,扩展它的尺寸以便它与模型输入匹配并尝试打印从 到 的像素值tensor[0][0][0][0]
,tensor[0][9][0][0]
我得到以下输出:
tensor[0][0][0][0]: 50
tensor[0][1][0][0]: 48
tensor[0][2][0][0]: 45
tensor[0][3][0][0]: 39
tensor[0][4][0][0]: 37
tensor[0][5][0][0]: 47
tensor[0][6][0][0]: 65
tensor[0][7][0][0]: 80
tensor[0][8][0][0]: 95
tensor[0][9][0][0]: 88
我认为当使用PIL
库在 python 中读取图像时,它会在内部将字节数组解码为特定格式的图像。在 Go 中,我正在读取一个字节数组并将其按原样转换为张量。没有解码阶段。
我无法在 Python 中更改代码,这意味着我必须找到一种方法来解码ReadFile
函数读取的字节数组,就像PIL.Image.open
解码它一样。
Go 中是否有一个包可以让我以与 PIL 相同的方式读取图像。解决此类问题的最佳方法是什么?可能找出PIL.Image
库是否包装了某个 C 函数并在 Go 中创建相同的包装器函数?
解决方案
推荐阅读
- java - 如何在飞镖中接受二维列表的值
- html - 卡片中的垂直滚动不会一直走
- python - 我可以使用@classmethod 访问实例变量吗?
- c++ - 从菜单中选择时如何只绘制矩形?
- botframework - 如何在 bot 框架中一起使用 ml luis 实体和列表实体
- payment - 对于 Paytm JS Checkoput
- ssl - HAProxy TCP (443) 不同后端端口的负载平衡
- google-apps-script - 如何从 DocumentApp、应用程序脚本中的 getParagraphs() 中排除表格单元格段落
- java - 如何将数据从颤振模块传输到android应用程序
- bootstrap-4 - DX Bootstrap 子菜单弹出不会正确显示