Python-opencv:从stdin读取图像数据

时间:2013-03-14 16:11:18

标签: python opencv

如何从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

2 个答案:

答案 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()