[英]Traceback on OpenCV Hough Circles
2nd post here (I think) I got an Traceback (last recent call last): File "c:\Users\bala006\OneDrive - St John's Anglican College\Desktop\Personal\Torch\lick.py", line 30, in circles = 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:Assertion failed)._image.empty() && _image.type() == CV_8UC1 && (_image.isMat() || _image:isUMat() ) 在 function '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:断言失败)
表示“断言”(C++)表达式为false
。
._image.empty() && _image.type() == CV_8UC1 && (_image.isMat() || _image.isUMat())
上述语句适用于逻辑和之间的 3 个术语。
如果三者之一是false
,则表达式被评估为false
(并且false
引发和异常):
._image.empty()
为false
表示图像为空,但我们知道图像不为空。_image.type() == CV_8UC1
在图像类型不是CV_8UC1
的情况下为false
。(_image.isMat() || _image.isUMat())
从 Python 执行时不会为false
(忽略它)。 我们可以得出结论_image.type() == CV_8UC1
是false
。
CV_8UC1
是什么意思?
OpenCV 图像类型具有命名约定。
8U
每个组件应用 8 位(每个元素都是uint8
类型)。C1
应用1
颜色通道。 对于 BGR 颜色格式的彩色图像,类型为CV_8UC3
( C3
应用3
颜色通道)。
您可以验证img
的类型是uint8
NumPy 数组。
验证img.dtype
是 dtype dtype('uint8')
(它可能是)...
您可以通过检查img.shape
来检查颜色通道的数量。
您将看到img.shape
是(cols, rows, 3)
( 3
应用 3 个颜色通道)。
对于灰度图像(一个颜色通道),我们需要形状为(cols, rows)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.