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

为什么在Python函数内调用cv2.HoughCircles会触发OpenCV断言错误?

报错成因与修复方法

成因

  • 核心触发原因是cv2.HoughCircles接口的输入格式要求:根据报错中的断言规则_image.type() == CV_8UC1,该函数只能接收单通道8位灰度图像作为输入。你代码中cv2.imread默认读取的是3通道BGR彩色图像,直接传入后触发类型校验失败。
  • 同时你的代码存在两处隐藏逻辑漏洞:
    • 未对circles is None的情况做完整拦截,如果没有检测到符合条件的圆形,后续遍历circles的代码会直接报错
    • HoughCircles返回的检测结果是结构为(1, N, 3)的三维数组,直接遍历circles会因维度不匹配报错

修复步骤

  1. 调用HoughCircles前先将输入的彩色图像转换为灰度图
  2. 调整非空判断的范围,将绘制圆形的逻辑也放入非空判断分支内
  3. 修正circles的遍历逻辑,取第一层元素后再遍历每个圆形参数

修复后完整代码

import cv2
import numpy as np

def test(image):
    # 先转灰度图,符合HoughCircles输入要求
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 4, 70, minRadius=70, maxRadius=74)
    if circles is not None:
        circles = np.uint16(np.around(circles))
        # 取三维数组的第一层遍历
        for x, y, r in circles[0,:]:
            cv2.circle(image, (x, y), r, [0, 0, 255], 2)
    return image
img = cv2.imread('initial_frame.png')
image2 = test(img)

cv2.imshow('test', image2)
cv2.waitKey(0)
cv2.destroyAllWindows()

内容的提问来源于stack exchange,提问作者python noob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:36:03