您好我尝试使用简单的级联人检测,我想使用cv2.groupRectangles(),但每当我使用它时它会崩溃:
** OpenCV错误:断言失败(channels()== CV_MAT_CN(dtype))函数未知,文件...... \ src \ opencv \ modules \ core \ src \ copy.cpp,第212行
此应用程序已请求Runtime以不寻常的方式终止它。 请联系应用程序的支持团队以获取更多信息。 * *
我的代码:
rects = cascade.detectMultiScale(img, scaleFactor=1.05, minNeighbors=3, minSize=(minSize, minSize), maxSize=( maxSize, maxSize), flags=cv.CV_HAAR_DO_CANNY_PRUNING)
#print rects
rectList, weights = cv2.groupRectangles(rects, 1, 0.2)
if len(rects) == 0:
return []
rects[:,2:] += rects[:,:2]
return rects
在groupRectangles使用之前,一切正常。
答案 0 :(得分:1)
您可以尝试将 rects 从 numpy.array 转换为列表。
rectList, weights = cv2.groupRectangles(np.array(rects).tolist(), 1, 0.2)
这对我有用。
答案 1 :(得分:0)
简单的解决方案是确保每个rect中的所有值都是整数。
对于视觉参考,列表应格式为:
[[int, int, int, int], [int ,int ,int ,int], ...]
据我所知,每种类型的整数都应该有效,但在我的情况下,numpy喜欢转换为int32,它工作正常,但int16可能最好节省空间 - 你决定你需要什么......
int16整数(-32768到32767)
int32整数(-2147483648至2147483647)
int64整数(-9223372036854775808至9223372036854775807)