6

さまざまなオブジェクト検出器に OpenCV を使用していますが、移植可能なコードを書くのが難しいと感じています。

たとえば、OpenCV を自作でインストールした Mac に顔検出器をロードするには、次のように記述します。

haar=cv.Load('/usr/local/Cellar/opencv/2.4.2/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml')

これは移植性がありません。別のマシンに変更したい場合は、別の絶対パスを決定し、このコードを変更する必要があります。

OpenCV の OpenCV ルートを保持する変数はありますか? そうすれば、次のように書くことができます。

haar=cv.Load(os.path.join(OpenCVRoot, "haarcascades", 
                          "haarcascade_frontalface_default.xml"))

更新:これは私だけの問題ではないようです。これは、OpenCV ドキュメントの問題でもあります。ドキュメントには、次の壊れたサンプル コードが含まれています。

>>> import cv
>>> image = cv.LoadImageM("lena.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE)
>>> cascade = cv.Load("../../data/haarcascades/haarcascade_frontalface_alt.xml")
>>> print cv.HaarDetectObjects(image, cascade, cv.CreateMemStorage(0), 1.2, 2, 0, (20, 20))
[((217, 203, 169, 169), 24)]

lena.jpg のような例や事前トレーニング済みの分類器がインストールされている場所を推測する方法があれば、これは簡単に回避できます。

ソース: http://opencv.willowgarage.com/documentation/python/objdetect_cascade_classification.html (取得 3/5/13)

4

5 に答える 5

7

を使用cv2.__file__してモジュールへのパスを取得し、os.path を使用してシンボリック リンクを解決し、パス操作を行うことができます。このコード行は、Mac OS 自作インストールの haarcascades ファイルのディレクトリを返します。他のインストールでも機能する場合があります。

from os.path import realpath, normpath
normpath(realpath(cv2.__file__) + '../../../../../share/OpenCV/haarcascades')
于 2014-08-01T12:50:33.137 に答える
-1

このリンクを確認してください

sys.platform を使用してプラットフォームを決定し、sys.platform からの戻り値に応じて異なるデフォルト パスを設定できます。

于 2013-03-05T15:47:31.480 に答える
-2

xml ファイルを含むフォルダーをローカルのワークスペース フォルダーにコピーして、相対パスを使用しないのはなぜですか? 私が覚えているように、ハードドライブのスペースはそれほどかかりません

于 2013-03-05T15:51:39.937 に答える