无需自己执行额外的转换,该问题与 Python 的新旧 OpenCV 绑定的混合有关。另一个问题是关于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