Raspberry Pi 在 python 中捕获的图像质量与 raspistill

fly*_*all 6 python opencv raspberry-pi

我正在使用我的树莓派来检测我的猫何时在桌子上,但我在一些图像捕获部分遇到了一些麻烦。这是我正在运行的相关代码:

from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2
import subprocess

#method 1
with PiCamera() as camera:
    capImg = PiRGBArray(camera)
    time.sleep(0.1)
    camera.capture(capImg,format = 'bgr')
    image = capImg.array
    cv2.imwrite('image4.bmp',image)

#method 2
callString = 'raspistill -n -w %s -h %s -o /home/pi/python/catcam/image5.bmp --timeout 0' % (640,480)
subprocess.call(callString, shell = True)
Run Code Online (Sandbox Code Playgroud)

有没有办法将 raspistill 图像保留在内存中或执行类似camera.capture_continuous 的操作?比较 picamera 图像的质量:

在此输入图像描述

使用 raspistill 后颜色更好:

在此输入图像描述

我想每隔几秒钟捕获一张图像,但不想将每个图像写入磁盘,否则我会很快烧毁我的存储卡。而且,raspistill 速度相当慢。

任何有关如何以恒定速率捕获更好质量图像的指示将不胜感激!

编辑感谢下面的马克,我已经编辑了当前问题的帖子。

小智 0

如果需要,您可以使用 Python 调用 raspistill。下面是一个以第二个延迟重复运行 raspistill 命令的示例:

from time import sleep
from datetime import datetime
import subprocess

dir = "/home/pi/Desktop/cam_images/"

while (True):
    fileName= "img_" + datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + ".jpg"
    cmd = "raspistill -o " + dir + fileName
    subprocess.call(cmd, shell=True)   
    sleep(1)
Run Code Online (Sandbox Code Playgroud)