OpenCV-Python调用cv2.boundingRect获取轮廓外接矩形报错如何解决
报错根因
cv2.boundingRect要求传入单个轮廓的numpy点集,而cv2.findContours返回的contours是存储所有轮廓的列表,列表不能直接作为该函数的入参,因此触发参数类型错误。
代码修复
将原代码中绘制外接矩形的片段替换为以下内容:
contours = cv2.findContours(thresh1, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)[0] print(len(contours)) # 遍历所有轮廓分别计算外接矩形 for cnt in contours: # 过滤小面积噪点,可根据实际情况调整阈值 if cv2.contourArea(cnt) < 30: continue x,y,w,h = cv2.boundingRect(cnt) cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
额外优化建议
- 删掉首次循环转灰度的冗余逻辑,将占位黑图修改为和摄像头输出同尺寸的单通道图像,避免后续出现维度不匹配问题:
把black = np.zeros((512,512,3), np.uint8)改为black = np.zeros((480,640), np.uint8),或在首次读取到frame后再初始化black,匹配实际摄像头分辨率。 - 可删除循环开头的
wait(0.5),改为通过cv2.waitKey控制画面停留时间,避免画面卡顿。
内容的提问来源于stack exchange,提问作者Nate0523
相关产品推荐
相关产品推荐

