本发明属于红外图像处理领域,具体涉及一种获取未压缩的网络摄像头原始数据的方法。
背景技术:
网络摄像头传输视频时,常采用h.264压缩技术,降低带宽占用,但在此过程中,图像信息会丢失。
二进制文件是计算机系统中最为基础的文件格式,可以保存原始的完整的数据。将原始的数据放置在web服务器的根目录下,即可通过浏览器获取该文件。使用http库函数来获取原始文件,可以提高运行效率,为后续扩展算法功能提供方便的接口。
c语言可以高效的操作外设,将外设中的数据保存为二进制文件。web服务器可以使得网络设备通过url获得文件。两者都拥有成熟的实现方案。
客户端可以通过url获取数据。通过http库函数,可以实现自动获取url所包含的数据。
目前网络摄像头传输视频数据,通常会压缩视频以降低贷款提高效率。一旦遇到需要原始数据时,压缩视频所带来的损耗便不能忽略。本发明是基于传输原始视频的需求。
技术实现要素:
本发明的目的在于提出了一种获取未压缩的网络摄像头原始数据的方法,实现网络传输原始视频信号,满足了算法验证、算法功能实现的需求。
实现本发明目的的技术解决方案为:一种获取未压缩的网络摄像头原始数据的方法,实现步骤如下:
步骤1)网络服务器打开摄像头设备,设置摄像头输入格式为yuyv,并设置摄像头分辨率,转入步骤2);同时客户端获取网络服务器上二进制文件的url,转入步骤9);
步骤2)网络服务器申请视频数据的寄存器,设置寄存器的格式为摄像头内存格式,转入步骤3);
步骤3)网络服务器将摄像头内存映射到寄存器中,转入步骤4);
步骤4)网络服务器开启视频流数据采集,开始采集视频数据,转入步骤5);
步骤5)网络服务器从寄存器中得到原始视频数据,转入步骤6);
步骤6)网络服务器将获取的原始数据保存成二进制文件,转入步骤7);
步骤7)网络服务器将二进制文件复制到http服务器的根目录下,转入步骤8);
步骤8)返回步骤4),在摄像头设置正常时,保证二进制文件实时更新;
步骤9)客户端通过二进制文件的url获得二进制文件。
本发明和现有技术相比,其显著优点:
(1)提供了未经损坏的视频文件。
(2)提供了方便的api接口。
(3)可以有效地集成在其他程序当中。
附图说明
图1是本发明获取未压缩的网络摄像头原始数据的方法的流程图。
图2是本发明获取未压缩的网络摄像头原始数据的方法的结构图。
具体实施方法
下面结合附图对本发明作进一步详细描述。
二进制文件是计算机系统中基础的文件类型。将视频信号存储为二进制文件可以有效存储完整信号。通过客户端http库函数,可以获得便捷的原始数据api,为后续算法验证和图像处理提供了基础。
结合图1和图2,一种获取未压缩的网络摄像头原始数据的方法,实现步骤如下:
步骤1)网络服务器打开摄像头设备,设置摄像头输入格式为yuyv,并设置摄像头分辨率,转入步骤2);同时客户端获取网络服务器上二进制文件的url,转入步骤9):
其中设置摄像头输入格式,具体步骤为:
1-1)设置视频的制式;
1-2)设置视频的分辨率;
1-3)设置视频的帧率;
1-4)将设置好的格式输入摄像头。
视频的输入格式是由需求产生的。使用yuyv格式的输入数据,可以得到最高16位有效数据。在红外图像处理中,需要用到高位的灰度图像,因此我们可以将超出亮度范围的灰度数据存放到色度信号当中。
步骤2)网络服务器申请视频数据的寄存器,设置寄存器的格式为摄像头内存格式,转入步骤3)。
步骤3)网络服务器将摄像头内存映射到寄存器中,转入步骤4)。
步骤4)网络服务器开启视频流数据采集,开始采集视频数据,转入步骤5)。
步骤5)网络服务器从寄存器中得到原始视频数据,转入步骤6)。
以上步骤只在linux实现,windows系统中,没有直接读取摄像头数据的api。
步骤6)网络服务器将获取的原始数据保存成二进制文件,转入步骤7)。
其中保存原始视频数据为二进制文件,具体步骤为:
6-1)获取保存有原始视频数据的地址;
6-2)获取原始视频数据的长度;
6-3)获取要保存的二进制文件的文件对象;
6-4)从原始视频数据的首地址开始,将地址内的数据保存到二进制文件对象内,地址增加;
6-5)查看地址,若小于基地址加上数据长度,则将地址内的数据追加到二进制文件内,若等于基地址则释放二进制文件对象。
二进制文件未经压缩,占用空间很大,所以每存储这一帧图像时,覆盖上一帧图像,以平衡图像精度、实时性、系统资源。
步骤7)网络服务器将二进制文件复制到http服务器的根目录下,转入步骤8);
直接使用浏览器打开url,可以直接浏览/下载该文件。在没有实时性要求可以如此实现。
步骤8)返回步骤4),在摄像头设置正常时,保证二进制文件实时更新;
步骤9)客户端通过二进制文件的url获得二进制文件,具体步骤为:
9-1)打开http端口;
9-2)通过url获取返回对象;
9-3)查看返回对象的状态码,若状态码不是200则抛出异常;
9-4)获得返回对象的内容,即为高精度未压缩的网络摄像头原始数据。
此时读取的二进制文件在http库函数的返回对象当中,在客户端的内存当中。不同于直接通过浏览器下载,内存中的数据可以直接使用。