我有一个函数,我想在里面执行if
语句。我知道这在Python中是不可能的,所以我在实现if
语句之前添加了一个while
循环,但while
循环似乎没有停止,或者可能是另一个问题。
def hough(frame):
#calculate the median
medianFrame = np.median(randframes,axis=0).astype(dtype=np.uint8)
grayMedianFrame = cv2.cvtColor(medianFrame, cv2.COLOR_BGR2GRAY)
gframe = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #grayscale frame
dframe = cv2.absdiff(gframe, grayMedianFrame) #remove background
blurred = cv2.GaussianBlur(dframe,(11,11),cv2.BORDER_DEFAULT) #Gausian blur with standard deviation of 11
while True:
circles = cv2.HoughCircles(blurred, cv2.HOUGH_GRADIENT,1,120,param1= 50, param2=30,minRadius=0,maxRadius=0)
if circles is None:
radius.append(0)
continue
else:
circles = np.uint16(np.around(circles))
for j in circles[0, :]:
# draw the outer circle
cv2.circle(frame, (j[0], j[1]), j[2], (0, 0, 255), 2)
# draw the center of the circle
cv2.circle(frame, (j[0], j[1]), 2, (0, 255, 0), 9)
radius.append(circles[0][0][2])
break
return frame
函数中没有定义的可变额已经这样做了,但为了简单起见,我没有包括它们。
编辑:由于这些评论,我做了一些更改,但问题仍然存在
EDIT 2:代码运行良好,但当cirlces
返回None
时似乎出现了问题。
我现在假设您只需要一个工作的Hough Transform函数。OpenCV本身就是一个很好的例子。为Java
、C++
和python
提供解决方案:
Hough变换
我不能发表评论,所以写在这里,您的要求不太清楚,首先if
不是一个循环,其次我们无法理解何时打破While循环,我正在简化您的问题,这是示例代码。
if circles is None:
radius.append(0)
continue
else:
break
这种情况下的continue
也是不必要的,因为在if
之后,while
内不再运行任何代码
在回复之前,让我指出if
命令指的是一个语句,而不是一个循环(此处有更多信息(
根据这里:
continue语句用于跳过循环。
在特定情况下,如果if语句的条件为True,则将值0附加到半径列表中,然后继续while循环的下一次迭代。由于循环是while True:
,因此它无限地继续。如果您想要实现的是在满足If语句的条件时退出循环,那么一种方法可能是使用break
运算符而不是continue
运算符。
def hough(frame):
#calculate the median
medianFrame = np.median(randframes,axis=0).astype(dtype=np.uint8)
grayMedianFrame = cv2.cvtColor(medianFrame, cv2.COLOR_BGR2GRAY)
gframe = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #grayscale frame
dframe = cv2.absdiff(gframe, grayMedianFrame) #remove background
blurred = cv2.GaussianBlur(dframe,(11,11),cv2.BORDER_DEFAULT) #Gausian blur with standard deviation of 11
circles = cv2.HoughCircles(blurred, cv2.HOUGH_GRADIENT,1,120,param1= 50, param2=30,minRadius=0,maxRadius=0)
if circles is None:
return [0]
else:
circles = np.uint16(np.around(circles))
output = []
for j in circles[0, :]:
# draw the outer circle
cv2.circle(frame, (j[0], j[1]), j[2], (0, 0, 255), 2)
# draw the center of the circle
cv2.circle(frame, (j[0], j[1]), 2, (0, 255, 0), 9)
output.append(circles[0][0][2])
return output
## main program
radius = []
for frame in frames:
radius.append(hough(frame))