13

数日前、私は簡単なコンピュータビジョンシステムを作るための良い方法を探し始めました。OpenCVライブラリは私が必要としているものですが、Pythonで学ぶのは難しいことがわかりました。特にOpenCV 2.4.3のアップデート後は、Python関連のドキュメントが非常にスリムになっています。だから私は今、OpenCVにたくさんの変更があったことを理解しています。

import cv

今です

import cv2

そして、不足しているモジュールの束があります。つまり、はい、新しいpython-opencv構文の例がありますが、それは非常に狭く、理解するのが難しいことが証明されています。例:Pythonコードの公式ドキュメントの例

cv2.cvtColor(src, code[, dst[, dstCn]])

私はこのコードが何を意味するのか、そしてそれをどのように使うのかを知っています、少なくとも私は知っていると思います。しかし、ソースとカラーコードを書くことは私に何も与えません:

    Traceback (most recent call last):
  File "C:\FILEFOLDER\tut.py", line 11, in <module>
    cv.cvtColor('proba.jpg', 'CV_RGB2GRAY')
TypeError: an integer is required

または、変数のようなコードを書き込もうとした場合:

Traceback (most recent call last):
  File "C:\FILEFOLDER\tut.py", line 11, in <module>
    cv.cvtColor('proba.jpg', CV_RGB2GRAY)
NameError: name 'CV_RGB2GRAY' is not defined

それで、私のような初心者をC ++またはJavaの不要なコード例と混同しない、最新のOpenCVのPython関連のリファレンスドキュメント/チュートリアル/ブック/ガイドはありますか?

4

2 に答える 2

9

私はあなたがそれを逆の道に取っていると思います。

実際、新しいモジュールにより、OpenCVは古いインターフェースcv2に比べてはるかにシンプルになりました。cvNumpyのサポートにより、シンプルなだけでなく、非常に高速で生産性が高くなっています。唯一のことは、それを適切に使用する方法を知っている必要があるということです。

ここでは、次のように関数を使用する必要があります。

img = cv2.imread('pic.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

両方のモジュール間の比較を示す1つのSOFにアクセスしてください。これらすべてのOpenCVPythonインターフェイスの違いは何ですか。

もう1つのSOFがここにあります。これは、Numpyサポートを使用してコードを高速化する方法の簡単なデモンストレーションです。OpenCVのパフォーマンス比較-Pythonインターフェイス、cvおよびcv2

C ++は公用語ですが、OpenCVを使用するためにC++またはCを学ぶ必要はありません。それでも、Python-OpenCVは優れたサポートを提供しています。OpenCVの使用方法を理解すると、C++コードをPythonに自分で変換できるようになります。次に、C++チュートリアルからOpenCVを学ぶこともできます。たとえば、完全にC++であるGaryBradskyによる「LearningOpenCV」からOpenCVの学習を開始しました。当時はcvインターフェースしかありませんでした。

コメントで述べたように、opencvpython.blogspot.comにはいくつかの入門チュートリアルがあります。私はOpenCVの初心者に焦点を当てて始めました。

また、他のチュートリアルについては、このSOFを確認してください:OpenCVおよびPython用の本?

于 2012-11-14T19:14:05.793 に答える
4

別の角度から見て、新しいOpenCVインストールバージョンで古いコードを実行できるようにするには...

まず、cvからcv2への移行は、多くの関数に異なるデータ構造を使用するライブラリと関係があります。関数がcv2とcvの間で変更されたかどうかを判断する最も簡単な方法は、cv関数が大文字で始まることです。再加工されたcv2関数は、常に小文字の最初の文字を持っているようです。したがって、古い本や古い例を使用している場合でも、従来の履歴書を使用できます。cvはcv2に埋め込まれるようになりました。スクリプトの上部で以下を使用するだけです

    import cv2
    import cv2.cv as cv #required for old code not to be changed

これにより、古いコードを変更せずに簡単に実行できます。ここで関数呼び出しを使用してデモンストレーションします。持っていた...

    cv.cvtColor('proba.jpg', 'CV_RGB2GRAY')

私が最初に気付くのは、あなたの関数が間違って呼び出されているかもしれないということです。(関数の最初の文字が小文字である場合、cvではなくcv2で開始する必要があります)。2つ目は、関数を渡す「コード」です。「コード」はcv2とcvのメンバーです(ここではnoobをコーディングしています。私の語彙の一部が不正確な場合はご容赦ください)が、常に同じとは限りません。'CV_RGB2GRAY'があります。まず、引用符はありません。これはcv2ではなくcv'コード'です。また、「履歴書」がありません。前に。ここで示すのは、古いcvバージョンに対して関数を呼び出す必要があると私が信じている方法です。

    cv.CvtColor('proba.jpg', cv.CV_RGB2GRAY) #Assuming you used listed imports
    cv2.cv.CvtColor('proba.jpg', cv2.cv.CV_RGB2GRAY) #Assuming you skipped second import

そして今cv2...

    cv2.cvtColor('proba.jpg', cv2.COLOR_RGB2GRAY)

どうぞ、これがお役に立てば幸いです。Pythonがスクリプトで実行されている場合は、不明な点をコマンドラインに直接入力できることを忘れないでください。これは私が私の理解を構築するのを助けるために不思議に思います(私は5日前に最初にpythonを使用しました)。たとえば、関数に整数が必要な理由を疑問に思っている場合は、次のように入力します。

    cv.CV_RGB2GRAY

Pythonコマンドラインに直接入力すると、「7」(intであると便利です)が返されます。cv2バージョンは「7L」を吐き出します。WaitKey()関数を何らかの形で何度も使用することを忘れないでください。そうしないと、状況によっては、highguiが一部のコマンドを処理するのに必要な時間がない場合があります。さて、それはそれを締めくくります。すでにカバーまたは参照されているいくつかのことをカバーした場合は申し訳ありません。私がそれを自由に削除した場合は、管理者。

于 2013-02-11T02:05:56.813 に答える