使用 opencv 和 pyautogui 与用户交互保存图像

Saving images with opencv and pyautogui interactively with the user

我有下面的代码,我尝试执行以下操作: 开始捕获相机图像,但还想显示一个包含文本字段和 "ok" 按钮的对话框,用户必须在其中输入一个值并按下 "ok" 按钮,然后 scritp 保存图像 (jpg)用用户传递的值命名它。

import cv2
import time
import pyautogui

camera_port = 0

camera = cv2.VideoCapture(camera_port)
camera.set(3, 1280)# set the resolution
camera.set(4, 1024)

emLoop = True

while (emLoop):

    retval, img = camera.read()
    #gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    cv2.imshow('Foto', img)

    k = cv2.waitKey(100)

    if k == 27:
        emLoop = False

    elif k == ord('s'):
        nome = input(pyautogui.prompt(text='Scanei o código.', title='Aviso:', default=''))
        cv2.imwrite(nome, img)

camera.release()
cv2.destroyAllWindows()

捕获将始终处于活动状态,只要用户输入值并单击 "ok" 就会保存图像,当用户单击 "cancel" 对话框时,就会结束捕获并终止脚本。 我正在尝试这样做,但到目前为止没有成功......:(

函数 pyautogui.prompt 打开一个带有文本字段的对话框,用户可以在其中键入将返回的内容。这类似于函数 input 的工作方式。两者都有一个字符串作为参数,作为提示消息显示给用户。不同的是,前者使用终端作为输入界面,而不是对话框。

按照您尝试的方式混合它们看起来很奇怪:nome = input(pyautogui.prompt(...))。这意味着:打开一个对话框,以便用户可以键入将在控制台中为他自己显示的提示消息。之后,他再次输入一些内容,这些内容将返回到 nome 变量。

试试这个:

nome = pyautogui.prompt(text='Scanei o código.', title='Aviso:', default='')

或者这样:

nome = input('Aviso: Scanei o código.')