我正在使用 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()