【发布时间】:2014-03-26 21:55:29
【问题描述】:
我在 Linux 中使用 Python 和 openCV。该程序应读取相机并能够更改最小和最大 h、s 和 v 颜色范围的轨迹条以实时分割帧。分割后,它应该在另一个窗口中显示该图像。 我的问题是分段显示为一个空窗口。
这是我的代码的一部分:
while(True):
if(not pause):
ret, current_img = video.read()
new_range(0)
cv2.imshow("Video", current_img)
key = cv2.waitKey(33)
if key==ord(' '):
pause = not pause
elif key == 27:
break
这是视频的循环,分割然后显示图像的函数是:
def new_range(x):
if(current_img != 0):
h_min = cv2.getTrackbarPosition("Bars", "min_hue")
h_max = cv2.getTrackbarPosition("Bars", "max_hue")
s_min = cv2.getTrackbarPosition("Bars", "min_saturation")
s_max = cv2.getTrackbarPosition("Bars", "max_saturartion")
v_min = cv2.getTrackbarPosition("Bars", "min_saturation")
v_max = cv2.getTrackbarPosition("Bars", "max_saturartion")
min_hsv = np.array([h_min, s_min, v_min])
max_hsv = np.array([h_max, s_max, v_max])
hsv = cv2.cvtColor(current_img, cv2.COLOR_BGR2HSV)
bw = cv2.inRange(current_img, min_hsv, max_hsv)
cv2.imshow("Segmentation", bw)
cv2.waitKey(0)
帮助?谢谢!
【问题讨论】:
-
您是否尝试过将 cv2.waitKey(0) 更改为 cv2.waitKey(33) 或类似的东西?我注意到延迟需要有一些值才能正常工作。还;从滑块返回的值是什么?
-
我修好了!这是非常简单的 current_img 不是全局的,所以我在函数 new_range(x) 的开头写了 global current_img。谢谢!
-
根据经验,您应该尽量避免使用全局变量。
标签: python opencv real-time video-processing