1. ホーム
  2. python

[解決済み] OpenCVのPythonインターフェースは何が違うのですか?

2023-01-28 13:03:53

疑問点

以下のものがあります。

主な違いと、どちらを使うべきですか?

どのように解決するのですか?

OpenCV は公式には,2種類の Python インターフェースを公開しています. cvcv2 .

cv:

私が仕事を始めたのは cv . これでは,OpenCV のすべてのデータ型がそのまま保存されます.例えば,画像を読み込む場合,その形式は cvMat のようになります.

配列の操作のために、いくつかの関数があります。 cvSet2D , cvGet2D など。そして、いくつかの議論では、それらはより遅いということです。

imageROIでは、以下のような特殊な関数が必要です。 cvSetImageROI .

輪郭を見つけたら cvSeq 構造体が返されますが、これはPythonのリストやNumPyの配列と比較すると、あまり良い働きではありません。

(そして、私はすぐにその開発は停止されると思います。以前は cv . その後,OpenCV には cvcv2 . 現在では、最新のリリースでは cv2 モジュールと cv の中のサブクラスです。 cv2 . を呼び出す必要があります。 import cv2.cv as cv を呼び出してアクセスする必要があります)。

cv2です。

そして、最新のものは cv2 . この中で、すべてが NumPy のようなオブジェクトで返されます。 ndarraynative 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の行列演算の違い をご覧ください。

返されるContoursはNumpy配列のリストです。Contoursについての詳しい説明は Contours - 1 : 入門 .

要するに、cv2 を使えば、すべてが単純化され、かなり速くなるのです。

NumPyがどのように高速化するかについての簡単な議論 cv2 はStack Overflowの質問で OpenCV-Python インタフェース,cv と cv2 の性能比較. .

pyopencv :

使っていないのでよくわかりません。ただ、これ以上の開発は止まっているようです。

公式のライブラリにこだわった方が良いと思います。

要するに、cv2 を使うことをお勧めします!

EDIT: インストールの手順については cv2 モジュールのインストール手順を WindowsでPython用OpenCVをインストールする .