将BytesIO流转换为Numpy数组?(Picamera)

4 投票
1 回答
7201 浏览
提问于 2025-04-18 14:42

我正在用树莓派和Picamera拍照,然后分析这些照片之间的差异。我用以下代码把照片保存到一个BytesIO流中,然后再把它读入一个Numpy数组(这个方法是从这个指南上借来的):

stream = io.BytesIO()
with picamera.PiCamera() as camera:
    camera.resolution = (100, 60)
    camera.framerate = 30
    while not done:
        camera.capture(stream, format='jpeg', use_video_port=True)
        if previousData == None:
            previousData = cv2.imdecode(np.fromstring(stream.getvalue(), dtype=np.uint8), 1)
            previousData = previousData[:, :, ::-1]
        else:
            timeStartNumpy = time.time()
            currentData = cv2.imdecode(np.fromstring(stream.getvalue(), dtype=np.uint8), 1)
            currentData = previousData[:, :, ::-1]
            ....(omitted analysis code)....
            previousData = currentData

我的分析代码本来应该正常工作,但它总是重复使用同一帧。我猜这可能是我从流中读取数据的方式出了问题,但我对Python不够熟悉,不知道该怎么改。希望能得到一些建议或帮助。

1 个回答

2

else这个分支里,你把当前捕获的画面赋值给了一个叫currentDate的名字,但在下一行又用previousData替换掉了它。所以,之前捕获的画面就没了,因为没有任何名字或者其他方式可以再找到它。你只需要删掉这个第二次赋值的部分就可以了。

撰写回答