6

ファイルではなく標準入力から画像データを読み取るにはどうすればよいですか?

C++ インターフェースを使用すると、可能と思われます: https://stackoverflow.com/a/5458035/908515。この関数imdecodeは Python でも利用できます。ただし、numpy arrayas (最初の) 引数が必要です。標準入力データを変換する方法がわかりません。

これは私が試したものです:

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 stdin バッファが画像に対して小さすぎるようです。-uバッファリングを削除するために、フラグを付けてプログラムを実行できます。この回答の詳細。

2つ目は、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 に答える