gpt4 book ai didi

python - 带有视频识别对象的 HOGDescriptor

转载 作者:太空狗 更新时间:2023-10-30 02:21:44 24 4
gpt4 key购买 nike

不幸的是,我既是 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)

    ) 我认为我需要将 framecv2.cv.iplimage 转换为 numpy.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

我真的不明白哪个元素才是真正的问题所在。 IE。哪个数字应该是 float ?

感谢任何帮助

最佳答案

您无需自己执行额外的转换,该问题与 Python 的新旧 OpenCV 绑定(bind)混合有关。关于 hog.detectMultiScale 的另一个问题仅仅是由于参数顺序不正确。

第二个问题可以通过查看help(cv2.HOGDescriptor().detectMultiScale)直接看到:

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

如您所见,每个参数都是可选的,但第一个(图像)除外。顺序也很重要,因为您有效地使用 winStride 作为第一个,而它应该是第二个,依此类推。您可以使用命名参数来传递它。 (所有这些都已在较早的答案中观察到。)

另一个问题是代码组合,这里是您应该考虑使用的示例代码:

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

关于python - 带有视频识别对象的 HOGDescriptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14400560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com