如何从stdin而不是文件中读取图像数据?
使用C ++接口,似乎有可能:https://stackoverflow.com/a/5458035/908515。函数imdecode
也可以在Python中使用。但它期望numpy array
作为(第一)参数。我不知道如何转换stdin数据。
这就是我的尝试:
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
答案 0 :(得分:10)
看起来python stdin缓冲区对于图像来说太小了。您可以使用-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
答案 1 :(得分:0)
我已经尝试了上述解决方案,但无法使其工作。用 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()