当前位置: 代码迷 >> 驱动开发 >> linux 摄像头图像采摘马赛克
  详细解决方案

linux 摄像头图像采摘马赛克

热度:213   发布时间:2016-04-28 10:01:56.0
linux 摄像头图像采集马赛克
 我现在手里有四份驱动,uvcvideo1 、uvcvideo2、 uvcvideo3、  uvcvideo4,  其中第一个uvcvideo1 只有一个ko文件没有源码,其他三份有一份是我从linux源码包里面扒取得,经过交叉编译工具编译生成的,另外两份是其他公司提供的。
另外还有一个存取图片的App,目前是下面的情况。
(1)编译过程没有任何报错警告发出。
(2)App+uvcvideo1 得到的jpg图片是好的。
(3)App+uvcvideo2\uvcvideo3\uvcvideo4都是有问题的,严重的马赛克现象。
我做的分析如下:
(1) linux下APP摄像头采集图片的流程如下
一:首先设置抓取的图片格式(长宽格式,采集的帧率等)
二:根据上面的图片的格式(长宽)在摄像头的内存中设置一块缓冲buffer,一般缓冲3到6帧图片。
三:APP不断从这块buffer中抽取帧,来存取图片。
既然App+video1抓取的图片是好的,那么就说明App是不存在问题的,也就是图片的存取过程是没有问题的,还有就是摄像头硬件也是没有没有问题的,也就是CCD是没有问题的。
此外也可以排除buffer大小的问题,我也尝试试过不同的图片格式都是有马赛克现象。
两个过程不同的地方就在驱动,驱动编译过程没有错误也没有警告,可以说明编译应该是没有问题的。
(2) 仔细分析linux的uvc驱动源码,linux从2.6开始集成万能驱动,理论上支持所有的摄像头设备,驱动源码里面人为能改动的东西极少,部分厂家为了加入自己的读取芯片信息的函数,或者该一些地方可以多的兼容版本,其他的地方几乎没什么可以改动的。
(3) 我采集了大量的对比图片,不同的格式,发现图片的顶部一般是完好的,出问题都是图片的中下部数据,这个应该也可以说明数据的开始部分是没有问题,buffer后半部分数据或者丢失或者是被覆盖,或者是解析错误,此外还会出现图片无法解析,那么这个应该可以看出是图片的数据头发生了错误。
目前我还没有确切的定位到问题到底在哪,不知道你是否对这块有了解,谢谢。

------解决思路----------------------
你用了哪款摄像头来抓取图片?
摄像头本身工作正常么?
------解决思路----------------------
数据错帧引起的把
------解决思路----------------------
对你为什么要整这么多uvc摄像头驱动版本不理解,请先了解下何为uvc吧?请先看下v4l2的上层ioctl操作的里面有专门的参数可以看到摄像头的支持分辨率,图像格式yuv or 其他 ?以及你设置的参数是否成功都能看到,建议使用v4l2排查摄像头参数配置是否有误?