完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
5个回答
|
|
捕捉一个流
这个实例是通过capture()方法将捕获的一个图像转成一个以jpeg解码的流(bytes流) import io import time import picamera # 创建一个流 my_stream = io.BytesIO() with picamera.PiCamera() as camera: camera.start_preview() # 摄像头预热 time.sleep(2) camera.capture(my_stream, ‘jpeg’) 需要注意的是,这不像输出到一个文件,该流捕捉以后会自动关闭脚本,因为在这个实例中没有对流进行其他操作。若对象有flush方法的话,在捕捉完毕后,会调用对象的flush方法,如下: import time import picamera # 打开一个扩展名为jpg的文件 my_file = open(‘my_image.jpg’, ‘wb’) with picamera.PiCamera() as camera: camera.start_preview() time.sleep(2) camera.capture(my_file) # 在此时capture会调用my_file的flush方法,完成流封装。 # 但并未关闭文件,需要调用close进行关闭 my_file.close() |
|
|
|
捕捉一个图像转化成PIL image对象
首先我们要捕捉一个图像流,然后通过流读取将图像的数据转换成PIL image对象。 import io import time import picamera from PIL import Image # 创建一个流 stream = io.BytesIO() with picamera.PiCamera() as camera: camera.start_preview() time.sleep(2) camera.capture(stream, format=‘jpeg’) # 将指针指向流的开始 stream.seek(0) image = Image.open(stream) |
|
|
|
步骤一个图像转化成open cv对象
首先我们捕捉一个图像流,然后将图像数据转换为open cv对象: import io import time import picamera import cv2 import numpy as np # 创建一个流 stream = io.BytesIO() with picamera.PiCamera() as camera: camera.start_preview() time.sleep(2) camera.capture(stream, format=‘jpeg’) # 从流构建numpy data = np.fromstringAIner“》(stream.getvalue(), dtype=np.uint8) # 通过opencv解码numpy image = cv2.imdecode(data, 1) # opencv解码后返回以RGB解码的图像数据 image = image[:, :, ::-1] 如果你不想使用有损JPEG编码,并希望加快这一解码过程的话,可以使用picamera自带的picamera.array模块。可以使用PiRGBArray类简单的捕获’brg’格式的数据。(假定RGB与BGR是分辨率相同的数据,只是具有相反的颜色) import time import picamera import picamera.array import cv2 with picamera.PiCamera() as camera: camera.start_preview() time.sleep(2) with picamera.array.PiRGBArray(camera) as stream: camera.capture(stream, format=‘bgr’) # 此时就可以获取到bgr的数据流了 image = stream.array |
|
|
|
调整捕捉图像的分辨率
有时,我们需要将图片进行某种分析或处理,你希望尽可能的捕获比较小分辨率的图像,虽然这种分辨率的调整可以交给PIL或者opencv来完成,但是通过picamera可以更搞笑的完成这个操作: import time import picamera with picamera.PiCamera() as camera: camera.resolution = (1024, 768) camera.start_preview() # 摄像头预热 time.sleep(2) camera.capture(‘foo.jpg’, resize=(320, 240))同时调整分辨率的参数也可以适用于捕获视频的start_recording()方法。 |
|
|
|
在光线较暗的环境下捕获图像
树莓派的摄像头可以在光线比较暗的环境下捕获图像,其主要的实现方式是通过设置捕获属性,给摄像头设置一个比较高的光线增益,以及增加曝光的时间以让摄像头接受尽可能多的光。 通过设置shutter_speed[设置曝光时间]与framerate[帧率]两个参数 首先我们要设置一个比较慢的帧率,然后将曝光时间设置为6s来捕获图像 import picamera from time import sleep from fractions import Fraction with picamera.PiCamera() as camera: camera.resolution = (1280, 720) # 设置帧率为1/6fps,然后将曝光时间设置为6秒 # 最后将iso参数设置为800 camera.framerate = Fraction(1, 6) camera.shutter_speed = 6000000 camera.exposure_mode = ‘off’ camera.iso = 800 # 给摄像头一个比较长的预热时间,让摄像头尽可能的适应周围的光线 # 你也可以试试开启AWB【自动白平衡】来代替长时间的预热 sleep(10) # 最后捕捉图像,因为我们将曝光时间设置为6秒,所以拍摄的时间比较长 camera.capture(‘dark.jpg’) 如果在一个光线不是特别暗的地方使用以上实例,则你会得到一个严重曝光以至于可能是全白的图像文件。 因为我们设置了一个比较长的曝光时间,如果这时移动摄像头,那么我们将会得到一个严重图像扭曲的照片。 |
|
|
|
只有小组成员才能发言,加入小组>>
720 浏览 0 评论
1122 浏览 1 评论
2501 浏览 5 评论
2840 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2683 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
664浏览 9评论
679浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
792浏览 6评论
640浏览 5评论
681浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 12:14 , Processed in 1.148867 second(s), Total 86, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号