python-3.x - 为什么我不能在 python 函数中使用 HoughCircles?
问题描述
不知道我做错了什么,但我不能让 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-bit unsigned,np.uint8
) 和C1
(single-channel);_image.isMat() || _image.isUMat()
:检查输入是否为Mat
或UMat
(在 Python 中,它必须是一个 numpy 数组);
影响您的问题是您只能调用cv2.HoughCircles()
单通道(灰度)图像,您的图像有 3 个通道。将图像转换为灰度,然后重试。
推荐阅读
- node.js - 如何等待 findit 结果?
- jquery - Ajax 调用未按预期执行
- spring-boot - 使用restTemplate检查redis键是哈希还是字符串
- node.js - 如何在 Windows 上使用 Node.js 获得进程的延迟?
- javascript - 无法使用 javascript 选择文本字段
- google-apps-script - 创建可以克隆的容器绑定脚本的最佳方法是什么?
- assembly - 为什么'len equ $-aa'在程序集(emu8086)的源地址中不起作用?
- c - 计算多个循环的时间
- dynamics-crm - 如何消除实体视图的重复值?
- javascript - “Onvalid” JQuery 的术语