OpenCV水果计数代码报错:AttributeError: 无CV_RETR_LIST属性
解决OpenCV轮廓检测报错问题
错误原因
你使用的是OpenCV 4.x版本,该版本中轮廓检测的标志常量已移除CV_前缀,原cv2.CV_RETR_LIST和cv2.CV_CHAIN_APPROX_SIMPLE需替换为cv2.RETR_LIST和cv2.CHAIN_APPROX_SIMPLE。另外,OpenCV 4中cv2.findContours()返回轮廓列表和层级信息两个变量,直接赋值给单个变量会导致后续循环出错。
修改后的代码
import cv2 import numpy as np image = cv2.imread('tree.jpg') # 检查图片是否加载成功 if image is None: print("无法加载图片,请确认文件路径正确") exit() gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # OpenCV4+版本中,findContours返回轮廓列表和层级信息两个值 contours, hierarchy = cv2.findContours(gray, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) # 若需求是计数水果数量,直接取轮廓列表长度即可 fruit_count = len(contours) # 保留原逻辑计算轮廓区域灰度总和 gray_sum = 0 for contour in contours: (x, y, w, h) = cv2.boundingRect(contour) gray_sum += np.sum(gray[y:y+h, x:x+w]) print(f"--------------------水果数量:{fruit_count}") print(f"--------------------轮廓区域灰度总和:{gray_sum}")
额外说明
- 增加图片加载判断,避免因路径错误导致后续代码崩溃
- 原代码的灰度和计算并非水果计数逻辑,若需求是统计水果数量,直接使用
len(contours)即可 - 若要更精准识别水果,建议先对灰度图做阈值处理(如
cv2.threshold())过滤背景干扰,再进行轮廓检测
内容的提问来源于stack exchange,提问作者Sneha Somwanshi
相关产品推荐
相关产品推荐

