不幸的是,我既是一个python,又是一个openCV初学者,所以如果这个问题很愚蠢,请原谅我。
我试图使用cv2.HOGDescriptor
来识别视频中的对象。我关心的是一帧一帧的识别(也就是说,没有跟踪等等)。
我正在做的是:
我通过使用
capture = cv.CreateFileCapture(video_path) #some path in which I have my video
#capturing frames
frame = cv.QueryFrame(capture) #returns cv2.cv.iplimage
为了最终在帧上使用检测器(我将使用
found, w = hog.detectMultiScale(frame, winStride, padding, scale)
)我想我需要把frame
从cv2.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
我真的不明白哪一个元素才是真正的问题。一、 哪个数字应该是浮点数?
感谢任何帮助
不需要自己执行额外的转换,这个问题与新的和旧的OpenCV绑定的Python混合有关。关于
hog.detectMultiScale
的另一个问题仅仅是由于参数排序不正确。第二个问题可以通过检查
help(cv2.HOGDescriptor().detectMultiScale)
直接看到:如您所见,除了第一个参数(图像)之外,每个参数都是可选的。排序也很重要,因为您有效地使用了
winStride
作为第一个,而它应该是第二个,依此类推。可以使用命名参数传递它。(在前面的回答中已经观察到了这一切。)另一个问题是代码混合,下面是您应该考虑使用的示例代码:
win_stride
的默认参数,您应该将问题中使用的加法参数作为关键字传递。相关问题 更多 >
编程相关推荐