我编写了一个程序,该程序基本上是使用步进电机+ a4988驱动程序将托盘依次放在连接到Raspberry Pi的相机下面。该代码将纸盘带到起始位置,迈出一步,拍照,然后重复10次。然后将托盘返回到起始位置。我应该得到的是托盘上每个部分的10张照片以及托盘上的所有内容。
但是,我得到的是7张完全相同的照片,然后3张不同的照片,我不知道为什么。
我认为照相机以比托盘移动更快的速度拍摄照片,但是从代码中我看不出为什么会这样。
我之所以使用openCV来获取照片,是因为我计划对每张照片进行分析。
谢谢!
这里是我的代码:
from time import sleep
import RPi.GPIO as GPIO
import cv2
cam = cv2.VideoCapture(0)
DIR = 20 # Direction GPIO Pin
STEP = 21 # Step GPIO Pin
CW = 1 # Clockwise Rotation
CCW = 0 # Counterclockwise Rotation
SPR = 200 # Steps per Revolution (360 / 1.8)
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(DIR, GPIO.OUT)
GPIO.setup(STEP, GPIO.OUT)
GPIO.output(DIR, CW)
MODE = (14, 15, 18) # Microstep Resolution GPIO Pins
GPIO.setup(MODE, GPIO.OUT)
RESOLUTION = {'Full': (0, 0, 0),
'Half': (1, 0, 0),
'1/4': (0, 1, 0),
'1/8': (1, 1, 0),
'1/16': (1, 1, 1),}
GPIO.output(MODE, RESOLUTION['1/16'])
delay2 = 0.0208/32
GPIO.output(DIR, CCW)
for x in range (1500): # Brings Tray to level of first photo
GPIO.output(STEP, GPIO.HIGH)
sleep(delay2)
GPIO.output(STEP, GPIO.LOW)
sleep(delay2)
sleep(.5)
for a in range (0,9): # Begins 10 photos
for b in range (250): #Motor steps between photos
GPIO.output(STEP, GPIO.HIGH)
sleep(delay2)
GPIO.output(STEP, GPIO.LOW)
sleep(delay2)
sleep(.5)
ret, frame = cam.read() #Sets up cam for photo
cv2.imwrite("image"+str(a)+".jpg", frame) #Write photo to file
sleep(2)
GPIO.output(DIR, CW)
for x in range(3750): # Pushes Tray out to original starting position
GPIO.output(STEP, GPIO.HIGH)
sleep(delay2)
GPIO.output(STEP, GPIO.LOW)
sleep(delay2)
sleep(.5)
cam.release()
GPIO.cleanup()
答案 0 :(得分:0)
解决了这个问题,这要归功于Mark和Matt。感谢你的帮助。通过在每个马达步调一次视频捕获然后每次释放它,都可以解决。
此处提供代码:
for a in range(1,10):
cam=cv2.VideoCapture(0)
ret, frame = cam.read()
cv2.imwrite('iamge'+str(a)+"jpg", frame)
cam.release
...等等等等
因此,相机的每一步都会被调用并释放,这似乎可以解决
谢谢