4

残念ながら、私は python と openCV の両方の初心者なので、質問がばかげていたらすみません。

cv2.HOGDescriptorを使用してビデオ内のオブジェクトを認識しようとしています。フレームごとの認識に関心があります (つまり、トラッキングがないなど)。


これが私がやっていることです:

  1. を使用してビデオ(現在は.mpg)を読みました

    capture = cv.CreateFileCapture(video_path) #some path in which I have my video
    #capturing frames
    frame = cv.QueryFrame(capture) #returns cv2.cv.iplimage
    
  2. 最終的にフレームで検出器を使用するために (これは、

    found, w = hog.detectMultiScale(frame, winStride, padding, scale)
    

    )私は、私が行ったものframeから変換する必要があると考えましcv2.cv.iplimagenumpy.ndarray

    tmp = cv.CreateImage(cv.GetSize(frame),8,3)
    cv.CvtColor(frame,tmp,cv.CV_BGR2RGB)
    
    ararr = np.asarray(cv.GetMat(tmp)).
    

今、私は次のエラーがあります:

    found, w = hog.detectMultiScale(ararr, winStride, padding, scale)
 TypeError: a float is required

どこ

    winStride=(8,8)
    padding=(32,32)
    scale=1.05

ここでどの要素が本当の問題なのか本当に理解できません。つまり、浮動小数点数にする必要があるのはどれですか?

どんな助けでも大歓迎

4

2 に答える 2

7

その余分な変換を自分で実行する必要はありません。その問題は、Python の新しい OpenCV バインディングと古い OpenCV バインディングの混合に関連しています。もう 1 つの問題hog.detectMultiScaleは、単にパラメーターの順序が間違っていることです。

2 番目の問題は、以下を確認することで直接確認できますhelp(cv2.HOGDescriptor().detectMultiScale)

detectMultiScale(img[, hitThreshold[, winStride[, padding[, 
           scale[, finalThreshold[, useMeanshiftGrouping]]]]]])

ご覧のとおり、すべてのパラメーターはオプションですが、最初のパラメーター (画像) です。順序も重要です。効果的に使用winStrideするのは 1 番目であり、2 番目であることが期待されているためです。名前付き引数を使用して渡すことができます。(これはすべて、以前の回答で観察されています。)

もう 1 つの問題は、コードの混在です。使用を検討する必要があるサンプル コードを次に示します。

import sys
import cv2

hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
hogParams = {'winStride': (8, 8), 'padding': (32, 32), 'scale': 1.05}

video = cv2.VideoCapture(sys.argv[1])
while True:
    ret, frame = video.read()
    if not ret:
        break

    result = hog.detectMultiScale(frame, **hogParams)
    print result
于 2013-01-18T14:55:49.400 に答える
1

HOGDescriptor ::detectMultiScaleのC++バージョンのドキュメントには、引数の前にhit_threshold(タイプの)パラメーターが示されています。したがって、関数への引数が欠落しているようです。のデフォルトの引数を受け入れるには、質問で使用されている追加の引数をキーワードとして渡す必要があります。doublewin_stridewin_stride

于 2013-01-18T14:20:05.607 に答える