我试图从相机捕捉图像并保存。我将在两者之间进行一些计算,但出于问题的目的,我并非如此。 (即doStuff()
下方的行被评论)
问题在于我总是保存相同的图像而我不明白为什么。我似乎没有刷新内存缓冲区或类似的东西?
我尝试了示例from the docs,但效果很好。此外,在实际实施中,getFrame
在不同的文件中定义并导入,但我认为这不重要。
任何帮助表示赞赏
import cv2
import time, datetime
def getFrame(cap, fn='image'):
timeString = datetime.datetime.fromtimestamp(time.time()).strftime('%H_%M_%S_%Y_%m_%d')
readSuccess, frame = cap.read()
pn = os.getcwd() + '/Images/'
if readSuccess:
cv2.imwrite(pn+fn+'_'+timeString+'.png', frame)
cap = cv2.VideoCapture(0)
for ii in range(10):
doStuff() # this doesn't really matter, I'm testing it with this line commented
getFrame(cap) # <- this always saves the same image
修改
经过多次测试后:
它实际上并没有捕获相同的图像,但它似乎是 next 图像。接下来我的意思是,如果你认为这是一个实时流,它只是转移到下一个将被捕获的图像,以使其更清晰:
例如,如果它有10个图像缓冲区,则一旦运行.read
,它将捕获紧密间隔的10个图像。因此,当我执行下一个.read
命令时,它只返回先前捕获的图像并将一个添加到缓冲区。我在这里做了一些猜测,但我认为这就是正在发生的事情。这可以解释为什么上面的文档中的示例工作正常,这对于在实时流的情况下你想要的东西都是有意义的,但不是在我的情况下。
之前有没有人见过这种行为?解决方法?
EDIT2
我插入了以下代码:
for ii in range(10):
cap.grab()
在def getFrame(cap, fn='image'):
行之后,并认为有效,但是我对此并不了解,但仍然不太了解它。我希望某人有(a)更好的解决方案,(b)可能是一个实际的解释,而不是我的估计。
谢谢!