python中函数内部的IF循环



我有一个函数,我想在里面执行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本身就是一个很好的例子。为JavaC++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))

最新更新