Python OpenCV Показать следующее изображение через последовательный байт из Arduino - PullRequest
0 голосов
/ 18 февраля 2019

На данный момент, когда нажата кнопка, Arduino отправляет последовательные данные в программу Python на Raspberry Pi.Как только эти данные отправлены, программа python интерпретирует байт и отображает изображение.Отправленные байты колеблются между 0 и 1 для отображения image0 и image1 соответственно.Однако, когда отображается одно изображение, мне нужно нажать клавишу на клавиатуре, чтобы очистить его, прежде чем отобразится второе изображение.Это происходит из-за 'cv2.waitKey (0)'.

Я пытаюсь добиться, чтобы код получал последовательные данные, даже если изображение отображается, выходит из текущего изображения и автоматически отображает следующееобраз.В частности, я пытаюсь сделать все это с помощью кнопки, подключенной к arduino

Короче говоря, цель - кнопка -> отобразить изображение, снова нажать кнопку -> отобразить следующее изображение,Нигде не следует использовать клавиатуру.

Вот мой текущий код, который использует клавиатуру с командой cv2.waitKey (0).Любая помощь будет отличной.

Код Arduino:

int First=2;
int buttonState=0;
int num = 0;

void setup()
{
 Serial.begin(9600);
 pinMode(First, INPUT); 

}

void loop()
{
 int buttonState=digitalRead(First);

 if(buttonState==HIGH&&(num==1))
 {
   Serial.print(0x1);
   num--;
   delay(500);
   buttonState = 0;
 }
 if(buttonState==HIGH&&(num==0))
 {
   Serial.print(0x0);
   num++;
   delay(500);
   buttonState = 0;
 }
 if(buttonState==LOW)
 {
   //do nothing
 }
}

Код Python

import numpy
import cv2, glob
import sys
import os
import serial
from subprocess import Popen

ser=serial.Serial('/dev/ttyUSB0',9600)

Title = cv2.imread('/home/pi/Desktop/Avengers/Title.jpg')
Zero = cv2.imread('/home/pi/Desktop/Avengers/000.jpg')

while True:
    command = ser.read()
    if command:
        #flush serial for unprocessed data
        ser.flushInput()
        print("new command:", command)
        if (int(command) == 0):
            cv2.destroyAllWindows()
            cv2.namedWindow("Title", cv2.WND_PROP_FULLSCREEN)
            cv2.setWindowProperty("Title",cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)
            cv2.imshow('Title', Title)
            cv2.waitKey(0)
            cv2.destroyAllWindows()

        if (int(command) == 1):
            cv2.destroyAllWindows()
            cv2.namedWindow("Zero", cv2.WND_PROP_FULLSCREEN)
            cv2.setWindowProperty("Zero",cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)
            cv2.imshow('Zero', Zero)
            cv2.waitKey(0)
            cv2.destroyAllWindows()
            ser.flushInput()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...