为什么OpenCV显示空窗口而不是图像?

0 投票
2 回答
2010 浏览
提问于 2025-04-18 00:03

我在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)

有人能帮忙吗?谢谢!

2 个回答

0

我解决了这个问题!其实很简单,current_img 这个变量不是全局的,所以我在函数 new_range(x) 的开头加上了 global current_img。谢谢大家!

1

把图片转换回BGR格式

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

撰写回答