如果我使用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
上。
答案 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()
希望有帮助!