为什么我不能在 python 函数中使用 HoughCircles?
why can't I use HoughCircles inside a python function?
不确定我做错了什么,但我无法在函数内部将 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
会按要求显示。
关于解释错误。它来自 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 个通道。将您的图像转换为灰度,然后重试。
不确定我做错了什么,但我无法在函数内部将 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
会按要求显示。
关于解释错误。它来自 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 个通道。将您的图像转换为灰度,然后重试。