OpenCV调用cv2.HoughCircles触发(-215:Assertion failed)报错如何解决
报错原因
你遇到的报错是cv2.HoughCircles的输入格式校验不通过导致的,错误断言明确要求输入图像满足三个条件:
- 图像非空(你已经确认shape为(206,206),排除该问题)
- 图像类型为
CV_8UC1(即8位无符号单通道图像) - 输入是Mat或者UMat类型的矩阵
问题出在final_im的数值类型:
你代码中mask = np.zeros(crop.shape)默认生成float64类型的数组,和Canny输出的uint8类型crop相乘后,final_im会自动转换为float64类型,不满足CV_8UC1的类型要求,因此触发报错。
解决方法
只需要在得到final_im后,将其强制转换为uint8类型即可,同时建议增加返回结果判断,避免无检测结果时后续逻辑报错:
final_im = mask * crop # 新增类型转换代码,解决格式不匹配问题 final_im = final_im.astype(np.uint8) print(final_im.shape) circles2 = cv2.HoughCircles(final_im,cv2.HOUGH_GRADIENT,1,20,param1=20,param2=5,minRadius=0,maxRadius=20) # 新增非空判断,避免未检测到小圆时报错 if circles2 is not None: for j in circles2[0,:]: cv2.circle(final_im,(int(j[0]),int(j[1])),int(j[2]),(255,0,0),2)
内容的提问来源于stack exchange,提问作者Felix Filipi
相关产品推荐
相关产品推荐

