2

我正在使用 Python 和 OpenCV 制作一个在 Raspberry Pi 上运行的照相亭。我在这里找到了一个很好的代码示例,说明如何从网络摄像头捕获图像。http://joseph-soares.com/programacao/python/python-opencv-salvar-imagem-da-camera-no-disco/

单独提供的代码在 Pi 和我的 Windows PC 上都能完美运行。当我开始向其中添加代码时,我遇到了问题。我再也看不到网络摄像头在 Pi 上看到的内容,而在 Windows 上它被击中或错过。不过,他们都在拍照。在 Windows 中,它实际上会显示在框架中拍摄的图像。如果我恢复到原始代码,它再次工作得很好。

我基本上是在拍照之前使用一个循环来倒计时,并在 Arduino 上闪烁一个灯来表示将要添加的数字输出。我最初认为这是 Pi 上的内存问题,但它不起作用在我的桌面上让我不这么认为。任何帮助,将不胜感激。

import time, cv 
from datetime import datetime 
import pyfirmata 
import serial 

#board = pyfirmata.Arduino('/dev/ttyACM0') 
board = pyfirmata.Arduino('COM7') 
#arduino.open() 

# start an iterator thread so 
# serial buffer doesn't overflow 
iter8 = pyfirmata.util.Iterator(board) 
iter8.start() 

greenLED = board.get_pin('d:13:o') 

debug = 1 

def captureImage(): 
     snapped = cv.QueryFrame(capture) 
     cv.SaveImage(datetime.now().strftime('%Y%m%d_%Hh%Mm%Ss%f') + '.jpg', snapped) 

if __name__ == '__main__': 
     capture = cv.CaptureFromCAM(0) 
     cv.NamedWindow('Webcam') 
     try: 
          while True: 
               for n in range(0, 4): 
                    frame = cv.QueryFrame(capture) 
                    cv.ShowImage('Webcam', frame) 

                    cv.WaitKey(10) 

                    if debug: print "count down" 
                    for i in range (0, 5): 
                         print i 
                         greenLED.write(1) 
                         time.sleep(1) 
                         greenLED.write(0) 
                         time.sleep(0.2) 
                         i+=1 

                    greenLED.write(1) 
                    time.sleep(0.2) 
                    print "Say Cheese" 
                    captureImage() 
                    greenLED.write(0) 
                    if debug: print "Waiting for 5 seconds" 
                    time.sleep(5) 
                    n+=1 

               break 

          capture = None   
          cv.DestroyAllWindows() 
          board.exit() 

     except KeyboardInterrupt: 
          cv.DestroyAllWindows() 
          board.exit()
4

0 回答 0