cv2.waitKey(25)& 0xFF == ord(' q'):和cv2.imwrite()无法正常工作

时间:2018-06-03 19:08:58

标签: python python-3.x opencv cv2

我正在关注this项目制作一款播放Google Chrome Dino游戏的AI。在捕获屏幕提要以生成训练数据时,我陷入困境。我是CV的新手

该项目应该打破视频输入并将CSV文件保存在cv2.waitKey(25)& 0xFF == ord(' q'):条件。我认为,当关键" q"被压了。但是当我按下“q”时没有任何反应。按q时,此if条件下的print语句不会打印。

此外,虽然控制台在“上”打印了打印声明。 '向下'或者' t'按键条件,但

cv2.imwrite('./images/frame_(0).jpg'.format(x), img) 

似乎没有工作,因为图像文件夹中没有图像被保存。

这是代码

import cv2 
from mss import mss 
import numpy as np 
import keyboard

#Captures dinasour run for given coordinates

def start():
    """
    Capture video feed frame by frame, crops out coods and the dino then process
    """

    sct = mss()

    coordinates = {
        'top': 168,
        'left': 230,
        'width': 624,
        'height': 141
    }

    with open('actions.csv','w') as csv:
        x = 0
        while True:
            img = np.array(sct.grab(coordinates))

            #crop out the dino from the image array
            img = img[::,75:624]

            #edge detection to reduce ammount of image processing work
            img = cv2.Canny(img, threshold1=100, threshold2=200)

            if keyboard.is_pressed('up arrow'):
                cv2.imwrite('./images/frame_(0).jpg'.format(x), img)
                csv.write('1\n')
                print('jump write')
                x += 1

            if keyboard.is_pressed('down arrow'):
                cv2.imwrite('./images/frame_(0).jpg'.format(x), img)
                csv.write('2\n')
                print('duck')
                x += 1


            if keyboard.is_pressed('t'):
                cv2.imwrite('./images/frame_(0).jpg'.format(x), img)
                csv.write('0\n')
                print('nothing')
                x += 1

            # break the video feed
            if cv2.waitKey(25) & 0xFF == ord('q'):
                csv.close()
                cv2.destroyAllWindows()
                print('Exited')
                break

def play():
    sct = mss()

    coordinates = {
        'top': 168,
        'left': 230,
        'width': 624,
        'height': 141
    }

    img = np.array(sct.grab(coordinates))

    # crop out the dinosaur from the image array
    img = img[::,75:615]

    # edge detection to reduce amount of image processing work
    img = cv2.Canny(img, threshold1=100, threshold2=200)

1 个答案:

答案 0 :(得分:3)

cv2.waitKey()仅在您关注OpenCV窗口(例如,使用cv2.imshow()创建)时按键时才有效。对我来说,因为你根本不使用OpenCV的GUI功能。

如果您的程序中有OpenCV GUI,请将其对焦,然后按键。

如果没有,如果您不想实施,为什么不使用keyboard.isPressed()