これらすべてのOpenCVPythonインターフェースの違いは何ですか?


回答:


138

公式には、OpenCVは2種類のPythonインターフェースとcvをリリースしていますcv2

履歴書:

私はに取り組み始めましたcv。この場合、すべてのOpenCVデータ型がそのまま保持されます。たとえば、ロードされると、画像はcvMatC ++と同じ形式になります。

配列操作のために、のようないくつかの機能があるcvSet2DcvGet2Dなどが、そして、いくつかの議論が言う、彼らは遅いです。

imageROIの場合、のような特別な関数が必要cvSetImageROIです。

等高線が見つかった場合cvSeqは、PythonリストやNumPy配列と比較して操作に適さない構造が返されます。

(そして、私はすぐにその開発が停止されます。以前、だけだった、と思いますcv。その後、OpenCVのは、両方に付属cvしてcv2。今、そこに最新のリリースでは、そこにあるだけでcv2、モジュール、およびcvサブクラスの内側であるcv2。あなたが呼び出す必要がありますimport cv2.cv as cvアクセスします。)

cv2:

そして最新のものはcv2です。この中で、すべてのものは、次のように返されNumPyのようなオブジェクトndarraynative Pythonのようなオブジェクトliststuplesdictionaryこの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をインストールするで確認できます。


ソースからOpenCVを構築している場合、cv2Pythonインターフェースがコンパイルおよびインストールされます。Linuxまたはその他のOS用のバイナリパッケージを使用している場合は、OS /ディストリビューションのドキュメントを参照してください。ヘルプについては、goo.gl / MUjXiを参照してください。
TH。

1
@Framester:このリンクのcv2のインストール手順を参照してください:opencvpython.blogspot.in/2012/05/…–
Abid Rahman K

アビッドの答えは素晴らしいです。ただ、もう一つのポイントを追加するには:私はやったのPython 3.xのでプロジェクトを、私はOpenCVのへのアクセスを得ることができる唯一の方法は、ctypes_opencvと、元のOpenCVの1.0を介していました。OpenCV pre1.1のサポートを主張していますが、私はそれを動作させることができませんでした。これで、元のcvSetROIなどを使用することになります。Cタイプのインターフェイス。
神戸ジョン2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.