这里是第二篇文章(我认为) 我得到了一个 回溯(最近一次调用最后一次): 文件“c:\Users\bala006\OneDrive - St John's Anglican College\Desktop\Personal\Torch\lick.py”,第 30 行,位于 圆圈 = cv.HoughCircles(img, cv.HOUGH_GRADIENT, 1.2, 100) cv2.error:OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-kh7iq4w7\opencv\modules\imgproc\src\hough.cpp:2253:错误:( -215:断言失败) !_image.empty() && _image.type() == CV_8UC1 && (_image.isMat() || _image.isUMat()) 在函数'cv::HoughCircles'
错误。希望一切顺利...谢谢。 我使用 Cascade Trainer 创建了一个级联,并用它来检测乒乓球。
import cv2 as cv
import numpy as np
camera = cv.VideoCapture(0, cv.CAP_DSHOW)
cascade = cv.CascadeClassifier('cascade.xml')
while(1):
_,img = camera.read()
img = cv.flip(img,1)
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
detector = cv.SimpleBlobDetector()
LowerRegion = np.array([4,142,149],np.uint8)
upperRegion = np.array([33,255,255],np.uint8)
redObject = cv.inRange(hsv,LowerRegion,upperRegion)
kernal = np.ones((1,1),"uint8")
red = cv.morphologyEx(redObject,cv.MORPH_OPEN,kernal)
red = cv.dilate(red,kernal,iterations=1)
res1=cv.bitwise_and(img, img, mask = red)
circles = cv.HoughCircles(img, cv.HOUGH_GRADIENT, 1.2, 100)
if circles is not None:
circles = np.round(circles[0, :]).astype("int")
for (x, y, r) in circles:
cv.circle(img, (x, y), r, (0, 255, 0), 4)
cv.imshow("Masking ",res1)
cv.imshow("please work", img)
if cv.waitKey(10) & 0xFF == ord('q'):
camera.release()
cv.destroyAllWindows()
break
最佳答案
HoughCircles
不支持彩色图像。
在执行HoughCircles
之前,您需要将img
转换为灰度:
gray_frame = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
circles = cv.HoughCircles(gray_frame, cv.HOUGH_GRADIENT, 1.2, 100)
异常消息包含由 OpenCV 代码引发的 C++ 语句(该代码是用 C++ 实现的)。
异常消息看起来像是乱码,但仔细一看就暗示了原因:
(-215:Assertion failed)
表示“断言”(C++) 表达式为 false
。
!_image.empty() && _image.type() == CV_8UC1 && (_image.isMat() || _image.isUMat())
上述陈述在 3 个术语之间应用了逻辑和。
如果三者之一为 false,则表达式的计算结果为 false(并且引发 false 和异常):
!_image.empty()
isfalse
表示图像为空,但我们知道图像不为空。
如果图像类型不是 _image.type() == CV_8UC1
为false
。(_image.isMat() || _image.isUMat())
从 Python 执行时不会为false
(忽略它)。
CV_8UC1
,我们可以得出结论:_image.type() == CV_8UC1
是false
。
CV_8UC1
的含义是什么?
OpenCV 图像类型有命名约定。
8U
每个组件应用 8 位(每个元素为uint8
类型)。C1
应用1
颜色 channel 。
对于 BGR 颜色格式的彩色图像,类型为 CV_8UC3
(C3
应用 3
颜色 channel )。
您可以验证 img
的类型是否为 uint8
NumPy 数组。
验证 img.dtype
是否为 dtype('uint8')
(可能是)...
您可以通过检查 img.shape
来检查颜色 channel 的数量。
您将看到 img.shape
为 (cols, rows, 3)
(3
应用 3 个颜色 channel )。
对于灰度图像(一个颜色 channel ),我们需要形状为(列,行)
。
关于python - OpenCV 霍夫圆的回溯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67155677/