我正在检测图像中的周期
这是我的代码:
import cv2
import cv2.cv as cv
import numpy as np
img = cv2.imread('a1.png',0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
circles = cv2.HoughCircles(img,cv.CV_HOUGH_GRADIENT,1,80,
param1=50,param2=20,minRadius=0,maxRadius=0)
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
# draw the outer circle
cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
# draw the center of the circle
cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
cv2.imshow('detected circles',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()
当它在图像中找不到任何圆圈时会发生什么?我认为它将返回null或none返回圆圈。但我发现错误
OpenCV错误:cvGetMat中的错误标志(参数或结构字段)(无法识别或不支持的数组类型),文件/build/opencv-U1UwfN/opencv-2.4.9.1+dfsg1/modules/core/src/array.cpp,第2482行
我想让检测始终保持运行状态。所以我使用try catch:
try:
circles = cv2.HoughCircles(img,cv.CV_HOUGH_GRADIENT,1,80,
param1=50,param2=20,minRadius=0,maxRadius=0)
except :
print("no cars!")
exit()
else:
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
# draw the outer circle
cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
# draw the center of the circle
cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
但它仍然无效。 我已经测试过是否有可以检测到的循环。它有效。
那么,如何调整参数来寻找周期?我为图像尝试了很多参数。我想继续检测程序运行的时间。里面用try catch好吗?或者我应该使用别的东西
答案 0 :(得分:0)
我发现了这个错误。这些是文件名中的一些空格。
如果找不到循环,它将返回:
追踪(最近一次通话): 文件“circle.py”,第11行,in circles = np.uint16(np.around(circles)) 文件“/home/pi/.local/lib/python2.7/site-packages/numpy/core/fromnumeric.py”,第2789行,在附近 return _wrapfunc(a,'round',decimals = decimals,out = out) 在_wrapfunc中输入文件“/home/pi/.local/lib/python2.7/site-packages/numpy/core/fromnumeric.py”,第67行 return _wrapit(obj,method,* args,** kwds) 在_wrapit中输入文件“/home/pi/.local/lib/python2.7/site-packages/numpy/core/fromnumeric.py”,第47行 result = getattr(asarray(obj),method)(* args,** kwds) AttributeError:'NoneType'对象没有属性'rint'
它可以使用try catch使检测继续