如何从标准输入而不是文件中读取图像数据?
有了C++接口(interface),似乎可以:https://stackoverflow.com/a/5458035/908515 .函数imdecode
在 Python 中也可用。但它期望一个 numpy array
作为(第一个)参数。我不知道如何转换标准输入数据。
这是我尝试过的:
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
最佳答案
看起来 python 标准输入缓冲区对于图像来说太小了。您可以使用 -u
标志运行您的程序以消除缓冲。更多详细信息,请参阅 this回答。
其次是 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
关于Python-opencv : Read image data from stdin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15414480/