您的位置:首页 > 其它

picamera 1.10 教程及api中文简译(二)快速理解picamera

2016-01-12 14:46 405 查看
3、快速理解picamera

通过默认配置,开启摄像头,并预热10秒钟。

import time
import picamera

camera = picamera.PiCamera()
try:
camera.start_preview()
time.sleep(10)
camera.stop_preview()
finally:
camera.close()


运行后,可以看到摄像头的指示灯亮起10秒钟后熄灭。这里需要注意的是,每次调用后都需要通过close释放掉picamera的资源。

下面演示了python的with语句块,来隐式的开启picamera执行并最后释放掉资源(调用了close())

import time
import picamera

with picamera.PiCamera() as camera:
camera.start_preview()
time.sleep(10)
camera.stop_preview()


下面这个例子介绍了picamera的某些属性可以被动态调整。在例子中,亮度属性被逐渐增加。

import time
import picamera

with picamera.PiCamera() as camera:
camera.start_preview()
try:
for i in range(100):
camera.brightness = i
time.sleep(0.2)
finally:
camera.stop_preview()


下面这个例子演示了,picamera将分辨率设置为640*480并开启摄像头进行预览60秒,并将预览内容写入名为”foo.h264”的文件中。

import picamera

with picamera.PiCamera() as camera:
camera.resolution = (640, 480)
camera.start_preview()
camera.start_recording('foo.h264')
camera.wait_recording(60)
camera.stop_recording()
camera.stop_preview()


摄像头的默认分辨率为显示器的分辨率,如果显示器被禁用,则默认分辨率为1280*768。

这里需要注意的是,wait_recording()方法替代了time.sleep()方法,并且同时开始录制,此方法会抛出错误(例如磁盘已满),所以如果用time.sleep来代替wait_recording的话,stop_recording()的执行会被time.sleep所阻断,带休眠时间以后才会被执行。

下面这个例子演示的是,在开启摄像头之前设置了一些参数,然后捕捉一张照片存储到foo.jpg的文件中:

import time
import picamera

with picamera.PiCamera() as camera:
camera.resolution = (1280, 720)
camera.start_preview()
camera.exposure_compensation = 2
camera.exposure_mode = 'spotlight'
camera.meter_mode = 'matrix'
camera.image_effect = 'gpen'
# 初始化预热摄像头
time.sleep(2)
camera.capture('foo.jpg')
camera.stop_preview()


下面这个例子可以利用picamera来给拍摄的图像上打上Exif标记。

import time
import picamera

with picamera.PiCamera() as camera:
camera.resolution = (2592, 1944)
camera.start_preview()
time.sleep(2)
camera.exif_tags['IFD0.Artist'] = 'Me!'
camera.exif_tags['IFD0.Copyright'] = 'Copyright (c) 2013 Me!'
camera.capture('foo.jpg')
camera.stop_preview()


接下来的文档会详细介绍Exif标记的完整属性。

下面这个例子演示拍摄连续拍摄100次,每次暂停60秒,并且将拍摄的内容以“image{counter:02d}.jpg的格式保存在磁盘上,其中d为递增变量。

import time
import picamera

with picamera.PiCamera() as camera:
camera.resolution = (1280, 720)
camera.start_preview()
time.sleep(1)
for i, filename in enumerate(camera.capture_continuous('image{counter:02d}.jpg')):
print('Captured image %s' % filename)
if i == 100:
break
time.sleep(60)
camera.stop_preview()


下面这个例子演示了,在低分辨率的情况下,通过capture_sequence方法快速捕捉图像:

import time
import picamera

with picamera.PiCamera() as camera:
camera.resolution = (640, 480)
camera.start_preview()
start = time.time()
camera.capture_sequence((
'image%03d.jpg' % i
for i in range(120)
), use_video_port=True)
print('Captured 120 images at %.2ffps' % (120 / (time.time() - start)))
camera.stop_preview()


下面这个例子演示了,通过picamera来捕捉一张图像,并且通过RGB格式进行解码,生成一个numpy的图像阵列。

import time
import picamera
import picamera.array

with picamera.PiCamera() as camera:
with picamera.array.PiRGBArray(camera) as stream:
camera.resolution = (1024, 768)
camera.start_preview()
time.sleep(2)
camera.capture(stream, 'rgb')
print(stream.array.shape)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: