がある
opencv
(OpenCVの人たちからのライブラリ)、cv
(OpenCVの人たちからの古いライブラリ)とpyopencv
その前任者とctypes-opencv
。
主な違いは何ですか?どちらを使用すればよいですか?
回答:
公式には、OpenCVは2種類のPythonインターフェースとcv
をリリースしていますcv2
。
履歴書:
私はに取り組み始めましたcv
。この場合、すべてのOpenCVデータ型がそのまま保持されます。たとえば、ロードされると、画像はcvMat
C ++と同じ形式になります。
配列操作のために、のようないくつかの機能があるcvSet2D
、cvGet2D
などが、そして、いくつかの議論が言う、彼らは遅いです。
imageROIの場合、のような特別な関数が必要cvSetImageROI
です。
等高線が見つかった場合cvSeq
は、PythonリストやNumPy配列と比較して操作に適さない構造が返されます。
(そして、私はすぐにその開発が停止されます。以前、だけだった、と思いますcv
。その後、OpenCVのは、両方に付属cv
してcv2
。今、そこに最新のリリースでは、そこにあるだけでcv2
、モジュール、およびcv
サブクラスの内側であるcv2
。あなたが呼び出す必要がありますimport cv2.cv as cv
アクセスします。)
cv2:
そして最新のものはcv2
です。この中で、すべてのものは、次のように返されNumPy
のようなオブジェクトndarray
とnative Python
のようなオブジェクトlists
、tuples
、dictionary
このnumpyのサポートに起因するので、あなたはここにnumpyの操作を行うことができますなど、。NumPy
は非常に安定した高速な配列処理ライブラリです。
たとえば、画像を読み込むと、ndarray
が返されます。
array[i,j]
(i、j)位置のピクセル値を示します。
また、imageROIの場合、配列スライシングはのように使用できますROI=array[c1:c2,r1:r2]
。個別の機能は必要ありません。
2つの画像を追加するために、関数を呼び出す必要はありませんres = img1+img2
。呼び出すだけです。(ただし、NumPyの加算は、画像のようなuint8配列のモジュロ演算です。詳細については、OpenCVとNumpyの行列演算の違いの記事を参照してください。
返される等高線は、Numpy配列のリストです。輪郭に関する詳細な説明は、輪郭-1:はじめににあります。
つまり、cv2を使用すると、すべてが単純化され、非常に高速になります。
NumPyのスピードアップについての簡単な説明cv2
は、StackOverflowの質問OpenCV-Pythonインターフェイスcvとcv2のパフォーマンス比較にあります。
pyopencv:
使ったことがないのでよくわかりません。しかし、それ以上の開発は止まったようです。
公式図書館に固執したほうがいいと思います。
つまり、cv2を使用することをお勧めします。
編集:cv2
モジュールのインストール手順は、Windows forPythonにOpenCVをインストールするで確認できます。