6

如何从标准输入而不是从文件中读取图像数据?

使用 C++ 接口,似乎是可能的:https ://stackoverflow.com/a/5458035/908515 。该函数imdecode在 Python 中也可用。但它需要一个numpy arrayas (first) 论点。我不知道如何转换标准输入数据。

这是我尝试过的:

import cv
import sys
import numpy

stdin = sys.stdin.read()
im = cv.imdecode(numpy.asarray(stdin), 0)

结果:TypeError: <unknown> data type = 18 is not supported

4

2 回答 2

12

看起来 python 标准输入缓冲区对于图像来说太小了。您可以使用-u标志运行程序以删除缓冲。答案中的更多详细信息。

其次,numpy.asarray从数据中获取 numpy 数组的方法可能不是正确的,numpy.frombuffer对我来说效果很好。

所以这里是工作代码(只是我使用cv2而不是cv希望它不会太重要):

import sys
import cv2
import numpy

stdin = sys.stdin.read()
array = numpy.frombuffer(stdin, dtype='uint8')
img = cv2.imdecode(array, 1)
cv2.imshow("window", img)
cv2.waitKey()

可以这样执行:

python -u test.py < cat.jpeg
于 2013-03-14T18:27:58.763 回答
1

我已经尝试了上述解决方案,但无法使其工作。用 sys.stdin.buffer.read() 替换 sys.stdin.read() 完成了这项工作:

import numpy as np
import sys
import cv2

data = sys.stdin.buffer.read()
image = np.frombuffer(data, dtype="uint8")
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
cv2.imshow('stdin Image',image)
cv2.waitKey()
于 2021-07-04T12:54:49.743 回答