【问题标题】:Why OpenCV shows an empty window instead of an image?为什么 OpenCV 显示一个空窗口而不是图像?
【发布时间】: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


【解决方案1】:

将图像转换回 BGR 格式

bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)

【讨论】:

    【解决方案2】:

    我修好了!这是非常简单的 current_img 不是全局的,所以我在函数 new_range(x) 的开头写了 global current_img。谢谢!

    【讨论】:

      猜你喜欢
      • 2012-08-02
      • 2022-11-28
      • 2021-03-13
      • 2022-01-12
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      相关资源
      最近更新 更多