You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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}")

额外说明

  1. 增加图片加载判断,避免因路径错误导致后续代码崩溃
  2. 原代码的灰度和计算并非水果计数逻辑,若需求是统计水果数量,直接使用len(contours)即可
  3. 若要更精准识别水果,建议先对灰度图做阈值处理(如cv2.threshold())过滤背景干扰,再进行轮廓检测

内容的提问来源于stack exchange,提问作者Sneha Somwanshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 06:42:40