2012-03-28 16 views
10

OpenCV 2の場合、IPythonはデフォルトでNumPy配列を使用するようになりました。NumPy配列をcvMatに変換する

cvimage = cv2.imread("image.png") #using OpenCV 2 
type(cvimage) 
Out: numpy.ndarray #dtype is uint8 

pltimage = plt.imread("image.png") #using Matplotlib 
type(pltimage) 
Out: numpy.ndarray #dtype is float 

plt.imshow(cvimage) # works great 

cv2.imshow(cvimage) 
TypeError: Required argument 'mat' (pos 2) not found 

cv2は、デフォルトでnumpyのアレイを使用するので、任意のCVはもはや存在しない::マットコンストラクタとnumpyのは、cv::Mat配列に変換するためのいかなる機能を有していません。

アイデア?

+1

はい、これは既に回答済みです。しかし、私は別の問題でここに来た:すべての 'numpy.ndarray'タイプの' uint8'を表示することはできません。私は 'red = frame [:、:、0]'のような画像の単一のチャンネルを得るためにスライスを作成し、 'imshow'で例外を得ました。私は希薄さのためだと思う。 'red = frame [:、:、0] .copy()'これを修正しました。 –

答えて

14

この関数のドキュメントストリングは、imshow(winname, mat) -> Noneです。 インタープリタにcv2.imshow.__doc__と入力して、ドキュメント文字列を確認できます。

try cv2.imshow('Image', cvimage)

+2

'cvimage = cv2.imread( 'image.png')'に続いて 'cv2.imshow( 'Image'、cvimage)'を実行すると、エラーは返されず、画像が表示されます。 – zarthur

+0

numpyをインポートしないと、返される型は 'numpy.ndarray'です。 – zarthur

+1

必要な引数がありません – Neon22

3

Mat C/C++には標準/ネイティブ実装の行列がないため、オブジェクトが必要でした。

ただし、numpyarrayは、その機能を完全に置き換えるものです。したがって、cv2モジュールは、文書にマトリックスが示されている場合はいつでもnumpy.arrayを受け入れます。

14

質問は、NumPy配列(CV2配列に似ています)をMatオブジェクト(CV)に変換する方法を技術的に尋ねます。 mat_arrayマットオブジェクトであり、numpy_arrayがnumpyのアレイ又は像である

mat_array = cv.fromarray(numpy_array) 

:興味を持っている人のため、これをすることによって行うことができます。 できるだけ古いCV構造から遠ざかることをお勧めします。ナンシー配列は、ネイティブPythonの実装よりもはるかに優れたパフォーマンスを提供します

+9

これはcv2用ではありません –

+0

C++とcv2でどうすればいいですか? –

関連する問題