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



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

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

看起来python stdin缓冲区对于图像来说太小了。您可以运行带有-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

我已经尝试了上面的解决方案,但无法使其工作。用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()

相关内容

  • 没有找到相关文章

最新更新