如何获得焦点窗口的名称?

时间:2019-11-27 09:35:41

标签: python opencv

如果我使用cv2.imshow创建三个窗口并将焦点放在其中一个窗口上,那么我想获得该窗口的名称以保存该图像。该怎么做?

我对这个问题一无所获,也许有人可以告诉我如何更精确地提出问题?

cv2.imshow("pic1",src)
cv2.imshow("pic2",hsv)
cv2.imshow("pic3",gray)
if cv2.waitKey(0) == ord('s'):
    cv2.imwrite("./src.png",src)

在这段代码中,我想将重点放在其他人而不是src上。

1 个答案:

答案 0 :(得分:0)

我唯一可以单独使用OpenCV的高级GUI功能提供的解决方案是,使用自定义参数设置鼠标回调,该自定义参数代表窗口的名称和内容(即图像)。然后,例如,捕获鼠标左键按下事件会根据窗口的参数设置一些全局变量。最后,在某个无限循环中,记录了按键,然后按下s键时,将使用适当的名称保存当前选择的窗口中的图像。

请参见以下代码:

import cv2


# Set up mouse callback
def update_for_save(event, x, y, flags, params):
    global image, window_name

    # On left mouse button down (i.e. when the focus goes to the window), update global variables
    if event == cv2.EVENT_LBUTTONDOWN:
        image = params[1]
        window_name = params[0]


# Images
src = cv2.imread('path/to/some/image.png')
hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

# Window params
image = None
window_name = None

# Create windows, add mouse callbacks
cv2.imshow('pic1', src)
cv2.imshow('pic2', hsv)
cv2.imshow('pic3', gray)
cv2.setMouseCallback('pic1', update_for_save, ['pic1', src])
cv2.setMouseCallback('pic2', update_for_save, ['pic2', hsv])
cv2.setMouseCallback('pic3', update_for_save, ['pic3', gray])

while True:
    key = cv2.waitKey(1) & 0xFF

    # If s key is pressed, save image specified by global variables
    if key == ord('s'):
        cv2.imwrite(window_name + '.png', image)

    # If q key is pressed, close all windows
    elif key == ord('q'):
        cv2.destroyAllWindows()

希望有帮助!