編集:元のタイトル「numpy配列をcvmatに変換する」は誤りでした-OpenCVは有用なエラーメッセージではなく、ドキュメントを読んでいません!
OpenCV 2の場合、 IPython はデフォルトでNumPy配列を使用します。
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 :: Matコンストラクターはなくなり、NumPyにはcv::Mat
配列に変換する関数がありません。
何か案は?
関数には次のdocstringがあります:imshow(winname, mat) -> None
。インタプリタに_cv2.imshow.__doc__
_と入力すると、doc文字列を表示できます。
cv2.imshow('Image', cvimage)
を試してください。
tl; dr:元の質問では、「ウィンドウ名」の最初の引数がありませんでした。 「imshow」は2つのパラメーターを取り、1つだけが指定されました。
技術的には、NumPy配列(CV2配列に類似)をMatオブジェクト(CV)に変換する方法を質問します。興味のある方は、次の方法でこれを行うことができます。
mat_array = cv.fromarray(numpy_array)
ここで、mat_arrayはMatオブジェクトで、numpy_arrayはNumPy配列またはイメージです。可能であれば、古いCV構造から離れることをお勧めします。 Numpy配列はネイティブPythonでの実装よりもはるかに優れたパフォーマンスを提供します
Mat
オブジェクトが必要だったのは、C/C++に行列の標準/ネイティブ実装がなかったためです。
ただし、numpy
のarray
は、その機能の完全な代替品です。したがって、cv2
モジュールは、ドキュメントでマトリックスが示されている場合は常にnumpy.array
sを受け入れます。