实时摄像头手部角度检测遇TypeError:如何修复列表与整数比较问题?
解决手部角度检测中的TypeError问题
错误原因
报错源于代码中对列表与整数直接做大小比较:
area = [cv2.contourArea(c) for c in contours] if area < 3700 or 10000 < area :continue
area是存储所有轮廓面积的列表,Python不支持列表与整数用<运算符直接比较,因此触发TypeError: '<' not supported between instances of 'list' and 'int'。
同时原代码中cv2.minAreaRect(c)的c未定义,必须对应单个轮廓才能正常计算外接矩形。
修正后的代码片段
contours, hierarchy = cv2.findContours(fg_mask_bb,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)[-2:] # 遍历每个轮廓,逐个处理面积与角度 for c in contours: area = cv2.contourArea(c) # 判断单个轮廓面积是否在有效区间内 if area < 3700 or area > 10000: continue # 计算最小外接矩形 rect = cv2.minAreaRect(c) box = cv2.boxPoints(rect) box = np.int0(box) center = (int(rect[0][0]), int(rect[0][1])) width = int(rect[1][0]) height = int(rect[1][1]) angle = int(rect[2]) # 调整角度计算逻辑 if width < height: angle = 90 - angle else: angle = -angle
关键修正点
- 将生成面积列表的逻辑改为遍历单个轮廓计算面积,确保每次判断的是单个整数类型的面积值
- 将轮廓处理逻辑放入
for c in contours循环内,让c对应当前处理的轮廓 - 优化条件写法为
area > 10000,逻辑更直观
内容的提问来源于stack exchange,提问作者Andrea Gutiérrez Ceballos
相关产品推荐
相关产品推荐

