python 函数内的 IF 循环
IF loop inside a function in python
我有一个函数,我想在其中执行 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
函数内部未定义的变量已经完成,但为了简单起见,我没有包括它们。
编辑:感谢评论,我做了一些修改,但问题仍然存在
编辑 2:代码工作正常,但在 cirlces
return None
.[=18= 时似乎是个问题]
我不能评论所以写在这里,
您的要求不是很清楚,首先 if
不是循环,其次我们无法理解何时打破 While 循环,我正在简化您的问题,这里是示例代码。
if circles is None:
radius.append(0)
continue
else:
break
在这种情况下 continue
也没有必要,因为在 if
之后 while
中没有更多代码到 运行
在回复之前,让我指出 if
命令指的是语句,而不是循环(更多信息 here)
根据here:
The continue statement is used to skip the rest of the code inside a
loop for the current iteration only.
在您的特定情况下,当 if 语句的条件为真时,将值 0 附加到半径列表,然后继续 while 循环的下一次迭代。由于循环是 while True:
,它会无限继续下去。
如果您想要实现的是在满足 if 语句的条件时退出循环,那么一种方法可能是使用 break
运算符而不是 continue
运算符。
我目前假设您只需要一个有效的 Hough 变换函数。 OpenCV 本身就有一个很好的例子。为 Java
、C++
和 python
提供解决方案:
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))
我有一个函数,我想在其中执行 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
函数内部未定义的变量已经完成,但为了简单起见,我没有包括它们。
编辑:感谢评论,我做了一些修改,但问题仍然存在
编辑 2:代码工作正常,但在 cirlces
return None
.[=18= 时似乎是个问题]
我不能评论所以写在这里,
您的要求不是很清楚,首先 if
不是循环,其次我们无法理解何时打破 While 循环,我正在简化您的问题,这里是示例代码。
if circles is None:
radius.append(0)
continue
else:
break
在这种情况下 continue
也没有必要,因为在 if
之后 while
在回复之前,让我指出 if
命令指的是语句,而不是循环(更多信息 here)
根据here:
The continue statement is used to skip the rest of the code inside a loop for the current iteration only.
在您的特定情况下,当 if 语句的条件为真时,将值 0 附加到半径列表,然后继续 while 循环的下一次迭代。由于循环是 while True:
,它会无限继续下去。
如果您想要实现的是在满足 if 语句的条件时退出循环,那么一种方法可能是使用 break
运算符而不是 continue
运算符。
我目前假设您只需要一个有效的 Hough 变换函数。 OpenCV 本身就有一个很好的例子。为 Java
、C++
和 python
提供解决方案:
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))