Linux上位机开发实践(camera显示、截图和保存)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        对于camera应用来说,最基础的应用不多,主要就三个,分别是显示、截图和保存。不管是消费、工业和医疗,最早camera都是作为一个辅助设备存在的。大家想象一下,在民用领域,是不是也是这样。以最常见的车载行车记录仪为例,是不是也是这三个功能。当然,为了成本考虑,甚至显示都可以没有,比如可以通过一个wifi芯片来显示和设置。

1、显示

        camera的显示可以是hdmi,可以是mipi lcd,也可以是spi这种小屏幕。如果是医疗领域做检测,或者是工业领域做探伤,这种情况下,一般可以屏幕大一点。反之,行车记录仪这种产品,就可以屏幕小一点。假设,我们做好一个soc开发板的驱动,比如mipi lcd的驱动,这种情况下,就可以利用/dev/fb0节点完成camera图像的显示。所以,本质上显示就是一个/dev/video0-》/dev/fb0的转换过程。基本的步骤就是这样的,

// open /dev/fb0
// set /dev/fb0 attribute
// map /dev/fb0
// copy data to /dev/fb0 map address
// loop to copy data, goto previous one
// unmap /dev/fb0
// close /dev/fb0

        上面这部分是mipi lcd的做法,hdmi其实也类似。一般的soc都不会直接支持hdmi,有的时候需要转一下,比如mipi转hdmi,或者bt1120转hdmi。这种情况下,除了增加一颗芯片之外,只需要kernel和dts设置正确,能够生成/dev/fb0节点,其它处理方法和mipi lcd是一样的。

        反之spi屏幕这种,一般不会生成/dev/fb0,大家直接在用户侧完成数据copy即可。设备节点通常就是/dev/spidev0.0这样。

2、截图

        所谓截图,就是把当前camera显示的内容转成bmp、jpg或者是png图片。这部分工作还是比较简单的,一般都会用opencv来完成。等到从camera拿到图片之后,就可以转成cv::Mat形式,进而在需要保存的时候直接调用cv::imwrite函数即可。

        截图多用于拍照、留存和后续的进一步信息提取使用。

3、保存视频

        视频保存也不复杂。但是想要做的好,还是需要好好思考一下。通常来说,类似于行车记录仪、执法记录仪、运动相机这样的设备都会进行循环录制的动作。录制的视频一般都是保存在tf卡上面。如果soc本身cpu性能比较强,那么可以通过cv::VideoWriter直接进行录制。录制的文件格式可以是avi,也可以是mp4。和avi相比较,mp4录制的文件要小很多,所以用的场景更多一点。这样每来一帧frame,调用VideoWriter对象write一下frame即可。

        但是很多ipcam soc,或者低阶soc上面,对应的cpu性能往往不高,很难做到实时视频编码。这种情况下,就要把厂家的sdk用起来,也就是考虑到硬件加速,生成h264文件。等到周期满足之后,比如5min到了,再通过ffmpeg把h264转成mp4文件,这是另外一种更为通用的方法。

        转换的过程也很简单,本质上就是加层皮,

ffmpeg -i input.h264 -c:v copy output.mp4

4、是否需要网络

        是否需要网络由实际情况决定。比如说,假设有很多的camera终端需要存储、记录,这个时候就会有一个dvr。在这种情况下,就会用onvif、rtsp这样的协议,实现camera终端和dvr之间的通信,就是需要网络的。反之,如果只有一个camera终端设备,仅仅是作为消费相机、工业相机、或者内窥镜相机来使用,这种情况下就不再需要网络。没有网络的束缚,也可以达到进一步降低成本的目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式-老费

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值