前话

前面开发完GPIO口的功能,还剩下2个接口,一个是摄像头,一个是显示屏。本篇我们开发一个基于CSI接口的摄像头拍照程序。

Demo:摄像头CSI的拍照程序

树莓派摄像头

笔者买的不是USB网络摄像头,而是通过扩展排线插入摄像头,摄像头参数和结构如下:

接线图

启用摄像头

sudo raspi-config

然后重启树莓派。

使用raspistill命令行操作摄像头

raspistill在指定的时间运行摄像头,而且如果需要可以捕获JPG图片。

命令格式:raspistill [options]

图像参数与命令

-?, --help : 帮助文档

-w, --width : 设置图像宽度

-h, --height : 设置图像高度

-q, --quality : 设置jpeg品质 <0到100>

-r, --raw : 增加raw原始拜尔数据到JPEG元数据

-o, --output : 输出文件名 ,如果要写到stdout,使用`-o -`,如果不特别指定,图像文件不会被保存

-l, --latest : 链接最近的完整图像到指定文件

-v, --verbose : 在运行摄像头时输出详细信息

-t, --timeout : 拍照和关闭时的延时指定,未指定时默认是5s

-th, --thumb : 设置预览图(小图)参数(包括X、Y、品质)或者不设置

-d, --demo : 运行一个demo模式(cycle through range of camera options, no capture),括号里的我可以理解成循环测试模式吗?

-e, --encoding : 编码来输出指定格式文件 (jpg, bmp, gif, png)

-x, --exif :将可交换图像文件应用到捕获中(格式:`key=value`)或者不设置

-tl, --timelapse : 间隔拍摄,每拍摄一张图片

-fp, --fullpreview : 用静态捕捉分辨率运行预览(可能会减小预览帧率)

-k, --keypress : 按键触发,按`ENTER`键拍照,按`X`然后`ENTER`键退出

-s, -signal : 信号触发,等待另一个进程信号来拍摄一张照片

-g, -gl : 绘制预览到文本,而不是使用视频渲染组件(啥意思?)

-gc, --glcapture : 捕获GL帧buffer而不是摄像机图像

-set, --settings : 检索摄像机设置值然后写出到stdout

-cs, --camselect : 选择摄像头设备 ,默认0

-bm, --burst : 运行burst capture mode

预览参数与命令

-p, --preview : 预览窗口大小设置

-f, --fullscreen : 全屏幕预览模式

-op, --opacity : 预览窗口透明度 (0-255)

-n, --nopreview : 不显示预览窗口

图像参数与命令2

-sh, --sharpness : 设置图像锐度 (-100 到 100)

-co, --contrast : 设置图像对比度 (-100 到 100)

-br, --brightness : 设置图像亮度 (0 到 100)

-sa, --saturation : 设置图像饱和度 (-100 到 100)

-ISO, --ISO : 设置摄像头感光度

-vs, --vstab : Turn on video stabilisation 开启摄像头防抖模式(是这个意思吗?)

-ev, --ev : 设置EV补偿

-ex, --exposure : 设置曝光模式(参见提示)

-awb, --awb : 设置AWB模式(参见提示)

-ifx, --imxfx : 设置图像效应(参见提示)

-cfx, --colfx : 设置色彩效应(参见提示)

-mm, --metering : 设置测光模式(参见提示)

-rot, --rotation : 设置图像旋转 (0到359)

-hf, --hflip : 设置水平翻转 horizontal flip

-vf, --vflip : 设置垂直翻转 vertical flip

-roi, --roi : 设置interest区域 (啥叫interset?)

--ss, --shutter : 设置快门速度,微秒

--awbg, --awbgains : 设置AWB阈值, AWB模式必须关闭

--drc, --drc : 设置DRC水平

提示

曝光模式选项:

auto - 自动曝光模式

night - 夜间拍摄模式

nightpreview - 夜间预览拍摄模式

backlight - 逆光拍摄模式

spotlight - 聚光灯拍摄模式

sports - 运动拍摄模式

snow - 雪景拍摄模式

beach - 海滩拍摄模式

verylong - 长时间曝光拍摄模式

fixedfps - 帧约束拍摄模式

antishake - 防抖模式

fireworks - 烟火拍摄模式

自动白平衡选项:

off - 关闭白平衡测算

auto - 自动模式(默认)

sun - 日光模式

cloud - 多云模式

shade - 阴影模式

tungsten - 钨灯模式

fluorescent - 荧光灯模式

incandescent - 白炽灯模式

flash - 闪光模式

horizon - 地平线模式

图像特效选项:

none - 无特效(默认)

negative - 反色图像

solarise - 曝光过度图像

posterize - 色调图像

whiteboard - 白板特效

blackboard - 黑板特效

sketch - 素描风格特效

denoise - 降噪图像

emboss - 浮雕图像

oilpaint - 油画风格特效

hatch - 草图特效

gpen - 马克笔特效

pastel - 柔化风格特效

watercolour - 水彩风格特效

film - 胶片颗粒风格特效

blur - 模糊图像

saturation - 色彩饱和图像

colourswap - 暂未可用

washedout - 暂未可用

posterise - 暂未可用

colourpoint - 暂未可用

colourbalance - 暂未可用

cartoon - 暂未可用

测光模式选项:

average - 全画面平衡测光

spot - 点测光

backlit - 模拟背光图像

matrix - 阵列测光

预览参数与命令2

-gs, -glscene : GL屏幕尺寸等参数

-gw, -glwin : GL窗口参数

命令1:两秒钟(时间单位为毫秒)延迟后拍摄一张照片,并保存为 image.jpg

raspistill -t 2000 -o image.jpg

命令2:拍摄一张自定义大小的照片。

raspistill -o image.jpg -w 640 -h 480

命令3:降低图像质量,减小文件尺寸。

raspistill -o image.jpg -q 5

命令4:强制使预览窗口出现在坐标为 100,100 的位置,并且尺寸为宽300和高200像素。(注意:实测未出现预览窗口)

raspistill -o image.jpg -p 100,100,300,200

命令5:禁用预览窗口。

raspistill -o image.jpg -n

命令6:将图像保存为 PNG 文件(无损压缩格式,但是要比 JPEG 速度慢)。注意,当选择图像编码时,文件扩展名将被忽略。

raspistill -o image.png -e png

命令7:向 JPEG 文件中添加一些 EXIF 信息。该命令将会把作者名称标签设置为Dreamcolor,GPS海拔高度为123.5米。

raspistill -o image.jpg -x IFD0.Artist=Dreamcolor -x GPS.GPSAltitude=1235/10

命令8:设置浮雕风格图像特效。

raspistill -o image.jpg -ifx emboss

命令9:设置 YUV 图像的 U 和 V 通道为指定的值(128:128 为黑白图像)

raspistill -o image.jpg -cfx 128:128

命令10:仅显示两秒钟预览图像,而不对图像进行保存。

raspistill -t 2000

命令11:间隔获取图片,在 10 分钟(10 分钟 = 600000 毫秒)的时间里,每 10 秒获取一张,并且命名为 image_number_1_today.jpg,image_number_2_today.jpg... 的形式。

raspistill -t 600000 -tl 10000 -o image_num_%d_today.jpg

命令12:获取一张照片并发送至标准输出设备

raspistill -t 2000 -o -

命令13:获取一张照片并保存为一个文件

raspistill -t 2000 -o - > my_file.jpg

关键代码

初始化

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

ui->label_photo->setGeometry(0,0,400,400);

connect(&_photo, SIGNAL(takeAPhotoReply(QPixmap)), this, SLOT(takeAPhonoReply(QPixmap)));

}

拍照功能

void MainWindow::on_pushButton_phono_clicked()

{

_photo.takeAPhoto();

}

模块代码

Photo.h

#ifndef PHOTO_H

#define PHOTO_H

#include

#include

class Photo : public QObject

{

Q_OBJECT

public:

explicit Photo(QObject *parent = 0);

void setTempFilePath(QString path = QString());

void clearArgs();

signals:

void takeAPhotoReply(QPixmap pixmap);

public slots:

QPixmap takeAPhoto(int time = 0, int width = 1920, int height = 1080);

private:

void doCmd();

private:

QString _cmd;

QStringList _args;

QString _path;

int _width;

int _height;

int _time;

};

Photo.cpp

#include "photo.h"

#include

#include

#include

#include

Photo::Photo(QObject *parent)

: QObject(parent)

{

_cmd = "raspistill -n ";

}

void Photo::setTempFilePath(QString path)

{

_path = path;

}

void Photo::clearArgs()

{

_args.clear();

}

QPixmap Photo::takeAPhoto(int time, int width, int height)

{

doCmd();

emit takeAPhotoReply(pixmap);

return pixmap;

}

void Photo::doCmd()

{

QProcess p;

p.execute(cmd);

}

运行效果

本文同步分享在 博客“红胖子(AAA红模仿)”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

树莓派android摄像头驱动开发,树莓派开发笔记(九):基于CSI口的摄像头拍照程序(同样适用USB摄像头)...相关推荐

  1. 树莓派开发笔记(九):基于CSI口的摄像头拍照程序(同样适用USB摄像头)

    若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...

  2. Android从驱动到应用开发实例分析

    Android从驱动到应用开发实例分析 1. 第一个android应用程序 Android应用一般包含一个源代码目录src.一个资源目录res.一个配置文件AndroidManifest.xml.和一 ...

  3. 虚拟摄像头驱动原理及开发

    (以下所说的都是基于微软的windows平台)                类似功能的产品,如著名的e2eSoft的 VCam,国内新浪的9518虚拟视频, 新浪的虚拟视频是DirectShow应用 ...

  4. Java后台微信点餐小程序开发最新版笔记,Springboot+Mysql+Freemarker+Bootstrap+微信小程序实现扫码点餐小程序,包含语音提示,微信消息推送,网页管理后台

    由于之前的Java后台微信点餐小程序有些知识点过时了,所以今天重新出一版,把里面过时的知识点更新下 前五章是部署笔记,后面是知识点的详细讲解,大家可以先看部署笔记,部署起来后,再跟着详细知识学习. 第 ...

  5. kali 树莓派 android,【原】树莓派安装KALI LINUX的手记

    2015年12月2日,满怀期待的树莓派2终于到了,顺便某宝购置了一套7寸1024*600的触摸屏(附上一个某宝链接:https://detail.tmall.com/item.htm?id=52299 ...

  6. 【Linux驱动】Linux--USB免驱摄像头驱动分析(基于5.4内核)

    Linux--USB免驱摄像头驱动分析(基于5.4内核) Linux摄像头系列文章 Linux--USB免驱摄像头驱动分析 一.UVC简介 二.UVC功能 三.如何写一个USB摄像头驱动 四.Linu ...

  7. Video4Linux下USB摄像头驱动和视频采集的实现

    1 引言 多媒体通信技术的发展为信息的获取和传输提供了丰富的手段,视频采集是其中不可缺少的重要组成部分.视频采集的手段多种多样,随着人们对降低系统成本和提高可靠性的迫切需求,基于嵌入式的视频采集系统成 ...

  8. Linux 下摄像头驱动支持情况

    http://eatdrinkmanwoman.spaces.live.com/blog/cns!97719476F5BAEDA4!1336.entry http://weijb0606.blog.1 ...

  9. linux下摄像头驱动分类

    在Windows下,摄像头驱动由厂商开发并提供.但在Linux下,因商业利益有限,只有极少厂商愿意提供摄像头驱动支持.这并不妨碍Linux下摄像头的使用--广大第三方志愿者维护着大大小小的驱动.之前做 ...

最新文章

  1. 采用编码器-解码器匹配语义分割的图像压缩
  2. what should you do if you want to have a high efficiency for communication
  3. Qt Post上传图片文件到服务器
  4. 用 openssl 生成 SSL 使用的私钥和证书,并自己做 CA 签名
  5. 如何以及为什么使用Spoon分析,生成和转换Java代码
  6. MongoDB+阿里云 最新数据库独家上线!
  7. Samba 3.0.25 颁布发表
  8. OpenCV3.4.3DNN 模块中sample-colorization、Easy-textdetector、openpose
  9. 第一章 软件项目管理概述
  10. 高精度双目立体视觉测量
  11. 【译】ZFS最佳实践指南-Part2
  12. [渝粤教育] 西南科技大学 语言学概论(汉语言文学) 在线考试复习资料
  13. common.css
  14. day14 匿名函数
  15. 3701汉化包 axure r9_Axure RP 9.0.0.3701 for Mac 中文共享版 – 知名的产品原型设计软件...
  16. 测井数据的聚类算法分段分层及图例
  17. easyui datebox控件点击今天按钮不触发onSelect事件的解决方法
  18. 【剖析 | SOFARPC 框架】之SOFARPC 连接管理与心跳剖析
  19. 第129章 SQL函数 %SQLUPPER
  20. 【paper吐槽】【SelfSupervised Learning】Self-Supervised Image Restoration with Blurry and Noisy Pairs

热门文章

  1. 嵌入式算法创业的窘境与思考
  2. 高并发编程之生产者—消费者设计模式
  3. K8S持久化存储:NFS+StorageClass实现动态供给
  4. 认识vue.js(一)
  5. 支持服务器系统什么意思,服务器系统支持
  6. 爬取微信公众号方法总结
  7. nextcloud服务器配置文档,NextCloud挂载数据盘
  8. 苹果x漫画脸_延续硬派定位 新一代五十铃mu-X首发
  9. 老马失足 波音KC-46加油机为何如此拖拉?
  10. OGNL表达式中的#、%和$