【问题标题】:why can't I use HoughCircles inside a python function?为什么我不能在 python 函数中使用 HoughCircles?
【发布时间】:2021-10-15 12:05:36
【问题描述】:

不确定我做错了什么,但我无法让 HoughCircles 在函数内部运行...

import cv2
import numpy as np

def test(image):
    circles = cv2.HoughCircles(image, 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:
        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()

这会导致 ...

circles = cv2.HoughCircles(image, cv2.HOUGH_GRADIENT, 4, 70, minRadius=70, maxRadius=74)
cv2.error: OpenCV(4.5.3) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-1i5nllza\opencv\modules\imgproc\src\hough.cpp:2253: error: (-215:Assertion failed) !_image.empty() && _image.type() == CV_8UC1 && (_image.isMat() || _image.isUMat()) in function 'cv::HoughCircles'

如果我删除对HoughCircles 的调用,则image2 会按要求显示。

【问题讨论】:

    标签: python-3.x opencv


    【解决方案1】:

    关于解释错误。来自hough.cpp#L1659

    CV_Assert(!_image.empty() && _image.type() == CV_8UC1 && (_image.isMat() || _image.isUMat()));
    

    分解,以下所有条件都必须为真:

    • !_image.empty():输入图片不能为空;
    • _image.type() == CV_8UC1:输入图像必须为8U(8位无符号,np.uint8)和C1(单通道);
    • _image.isMat() || _image.isUMat():检查输入是Mat还是UMat(在Python中,它必须是一个numpy数组);

    影响您的问题是您只能在单通道(灰度)图像上调用cv2.HoughCircles(),您的图像有 3 个通道。将您的图像转换为灰度,然后重试。

    【讨论】:

    • Arrrrgghhh....谢谢。不敢相信我问了这个问题。必须在这里休息一下。
    • 没问题!如果有帮助,请选择此作为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    相关资源
    最近更新 更多