擅长:python、mysql、java
<p>不需要自己执行额外的转换,这个问题与新的和旧的OpenCV绑定的Python混合有关。关于<code>hog.detectMultiScale</code>的另一个问题仅仅是由于参数排序不正确。</p>
<p>第二个问题可以通过检查<code>help(cv2.HOGDescriptor().detectMultiScale)</code>直接看到:</p>
<pre><code>detectMultiScale(img[, hitThreshold[, winStride[, padding[,
scale[, finalThreshold[, useMeanshiftGrouping]]]]]])
</code></pre>
<p>如您所见,除了第一个参数(图像)之外,每个参数都是可选的。排序也很重要,因为您有效地使用了<code>winStride</code>作为第一个,而它应该是第二个,依此类推。可以使用命名参数传递它。(在前面的回答中已经观察到了这一切。)</p>
<p>另一个问题是代码混合,下面是您应该考虑使用的示例代码:</p>
<pre><code>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
</code></pre>