Linux下利用luvcview来进行图像识别-准备

来源:互联网 发布:mac可以玩哪些游戏 编辑:程序博客网 时间:2024/04/29 03:33
使用USB 摄像头在笔记本上进行图像识别的学习是一种方便的方法

常用的一些视频服务器开源代码都不能很好的跟C910配合。大概原因是servfox,spcaview都是用V4L 1写的,而2.6.26后一般都用V4L 2来实现

luvcview的代码可以在http://www.ideasonboard.org/uvc/里找到,里面也可以看到它是支持罗技C910的

luvcview与servfox一样,也是用SDL来进行界面的显示

luvcview默认采用V4L2_PIX_FMT_MJPEG,可以在一开始初始化的地方改。
int format = V4L2_PIX_FMT_MJPEG;方式,
接着,它会去查询是否支持MJPG方式,如果不支持,则采用YUV方式。

显示图像,它用的是SDL_CreateYUVOverlay,当然,你也可以用SDL_Surface,或者用其它的工具来生成界面,这个无关紧要。奇怪的是,当我用SDL_Surface来显示RGB图像时,显示正常,但色彩缺失,但,如果我把它保存为图片,实现上是一切正常的,这个很奇怪,要研究一下。

creatButt用于自己产生按钮,它会去读一个数组,然后进行转换,应该是自己先做好图片,然后再读进来,显示。

创建了一个线程,用于捕获按钮
mythread = SDL_CreateThread(eventThread, (void *) &ptdata);

uvcGrab用于获取图像信息,如果是MJPEG方式,则首先要进行jpeg_decode的解码,如果是YUV,则直接拷贝到memcpy(vd->framebuffer, vd->mem[vd->buf.index],
  (size_t) vd->framesizeIn);里面

最后都是在framebuffer里面。

最近显示,也是用framebuffer里面的东西

其中Pyuv422torgb24,可以用于把YUV格式 转为RGB

所以如果你要进行图像识别,我会在将framebuff里存的YUV信息转成RGB格式,就用到了Pyuv422torgb24函数,然后再根据RGB信息进行图像识别

其实可以考虑用QT的QImage来显示视频

QT的作法是这样

直接往
        pixImage.loadFromData(rgb_buffer, imageSize);
        ui->label->setPixmap(pixImage);

其中rgb_buffer是RGB数据

参考资料:
http://v4l2spec.bytesex.org/

附上7小时连续工作的成果

Linux下利用luvcview来进行图像识别-准备


有了上次的经验,现在修改了spcaview的代码,服务器不动,新建了一个v4l的文件夹,里面放了spcaview的关键代码
然后使用QT做了一个界面,在界面 上显示,底层的SOCKET还是调用原来的
spcaview收到的数据就是jpeg格式的,直接用    pixImage.loadFromData((unsigned char *)jpeg_addr, imageSize);就可以成功

或者使用decode_jpeg,变成RGB格式,然后前面要放一个文件头,如pnm的文件头才可以在QT里面显示成功
pixImage.loadFromData(jpg_data, imageSize+15);

0 0