若该文为原创文章,未经允许不得转载
原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/79790642
各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究

红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...(点击传送门)

树莓派开发专栏(点击传送门)

上一篇:《树莓派开发笔记(八):GPIO口的I2C使用(BME280三合一传感器:测量温度、湿度、气压、海拔高度) 》

下一篇:《树莓派开发笔记(十):Qt读取ADC模拟量电压(ADS1115读取电压模拟量)》

前话

前面开发完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 : 间隔拍摄,每<ms>拍摄一张图片
-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 : 预览窗口大小设置 <x,y,w,h>
-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 <QObject>
#include <QPixmap>
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 <QDebug>
#include <QProcess>
#include <QPixmap>
#include <QApplication>
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);…
}

运行效果

上一篇:《树莓派开发笔记(八):GPIO口的I2C使用(BME280三合一传感器:测量温度、湿度、气压、海拔高度) 》

下一篇:《树莓派开发笔记(十):Qt读取ADC模拟量电压(ADS1115读取电压模拟量)》

原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/79790642

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

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

    前话 前面开发完GPIO口的功能,还剩下2个接口,一个是摄像头,一个是显示屏.本篇我们开发一个基于CSI接口的摄像头拍照程序. Demo:摄像头CSI的拍照程序 树莓派摄像头 笔者买的不是USB网络摄 ...

  2. 树莓派开发笔记(五):GPIO引脚介绍和GPIO的输入输出使用(驱动LED灯、检测按键)

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

  3. 树莓派开发笔记(十四):入手研华ADVANTECH工控树莓派UNO-220套件(三):使用研发自带系统测试rtc、gpio、232和485套件接口

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/124754769 红胖子(红模仿)的博文大全:开发技术集 ...

  4. 树莓派开发笔记(十七):树莓派4B+上Qt多用户连接操作Mysql数据库同步(单条数据悲观锁)

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/125188715 红胖子(红模仿)的博文大全:开发技术集 ...

  5. 树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/110940484 长期持续带来更多项目与技术分 ...

  6. 《树莓派开发笔记 - 第1部分 基础篇》第6章 树莓派摄像头操作

    6.1树莓派基本操作 目前提供了三个应用程序,分别为:raspistill.raspivid.raspistillyuv.其中 raspistill 和 raspistillyuv 非常相似,并且都是 ...

  7. 《树莓派开发笔记 - 第1部分 基础篇》第7章 树莓派变身路由器

    [注]笔者的树莓派是3B. 7.1 OpenWrt系统的安装 树莓派开发板没有配置板载FLASH,因为它支持SD卡启动,所有我们需要下载相应镜像,并将其烧写在SD上,启动系统即可(这个镜像里包含了我们 ...

  8. php调用linux摄像头,Linux_Linux中开发USB摄像头驱动详解,USB摄像头以其良好的性能和低 - phpStudy...

    Linux中开发USB摄像头驱动详解 USB摄像头以其良好的性能和低廉的价格得到广泛应用.同时因其灵活.方便的特性,易于集成到嵌入式系统中.但是如果使用现有的符合Video for Linux标准的驱 ...

  9. 树莓派开发笔记(二)搭建智能家居系统(1) — Home Bridge + Home Assistant

    搭建智能家居系统 搭建智能家居系统(1) 介绍 软件安装 简便安装 Home Assistant Home Bridge Home Bridge - Home Assistant 相关配置 HASS ...

最新文章

  1. makefile 中 =, :=, ?=, +=的区别
  2. Conda 为什么越来越慢?
  3. java redis 存session_JavaWeb: Redis存储Session方案
  4. java 32位_Java知识点:创建节约内存的JavaBean
  5. 被360整的体无完肤,我真的怒了!
  6. P01:01背包问题(转)
  7. 一年总结:2016.7.9 - 2017.7.9
  8. CodeMirror自动提醒配置
  9. NPAPI:JS的Number,在接口中可能是int32,也可能是double
  10. 深度WindowsXp错误的打了SP3补丁之后,无法进入系统
  11. LeetCode995.Minimum Number of K Consecutive Bit Flips(K 连续位的最小翻转次数 )
  12. ubuntu显示隐藏文件
  13. 系统分区减小_每日一练,防排烟系统,6.1
  14. shader拖尾_拖尾效果 - LouisSong - 博客园
  15. 电容的字母型规格型号标号材料容差总结
  16. redis—redis概述
  17. 医美“四大发明”?一次令人上头的认知碰撞
  18. 用Java实现递归与分治系列(二)
  19. Windows下安装Java以及开发环境配置
  20. 项目管理文档_免费直播 | 用项目管理“武装”质量管理体系

热门文章

  1. hackme pwn onepunch
  2. DAVE4 No source available for “xx() at 0xxxxx“
  3. hdu4114.Disney's FastPass
  4. 永别了,内涵段子APP及公众号被永久关停!!!!
  5. HTML5吃豆豆游戏开发实战(二)主角移动和动画循环设置
  6. 2022.6.2 质数(素数)与合数
  7. 【docker lnmp】 2、容器mysql 连接问题 getaddrinfo failed
  8. 【华为机试真题详解】不含 101 的数【2022 Q4 | 100分】
  9. PLC_SCL数据查找算法
  10. 训练YOLO v4模型时,xml格式转txt格式