日期:2014-05-16  浏览次数:20662 次

关于linux下摄像头的图像采集问题
刚接触linux,买了一个ARM开发板,想采集图像,用QT显示。厂家提供了一个源码,基本步骤就是:
1、打开/dev/video0
2、打开framebuffer
3、直接read摄像头文件(char[320*240*2]),把数据读取的数据拷贝到framebuffer,完成显示。

问题:
1、这时用read()读取的数据是不是只是像素,不能算图像?我在把它存为QImage后,显示出来的是一片黑(QT有没有直接显示这种数据的方法)。

2、如果只是像素,那想存成图片,比如bmp格式,要如何操作呢?

3、如果用v4l2,设置fmt.fmt.pix.pixelformat=V4L2_PIX_FMT_RGB32之类的,得到的是否就是完整的图像了?

4、驱动好像支持v4l2,我说“好像”是因为,ioctl(fd,V4L2_QUERYCAP,&cap)及ioctl(fd,V4L2_ENUMINPUT,&input)时,能成功返回。其它的返回值全是-1。结果是没法设置图片格式,甚至是不支持i/o读取,也不支持内存映射。是不是ioctl返回-1,也能用v4l2啊?这部分很模糊。
   
  希望高手不吝赐教!
  (分绝对不是问题,可以加,我关心的是答案。)


------解决方案--------------------
为什么要加 bmp 头再显示呢 ?
直接画在 framebuffer 上就能显示了啊 ,坐标也是可调的。

直接加上 bmp 头,再用 QImage 显示也是可以的,
但效率就比直接显示低了很多。不合适。
------解决方案--------------------
探讨
1. 是图像, 你要加上 bmp 图片的头才行。
2. 同上
3. 。。。

加上 bmp 的头就是图像了。

------解决方案--------------------
GTK中可以gdk_draw_rgb_image直接绘制像素到屏幕上,不用组织图片格式,在QT中应该也有类似的函数,因为都是封装X11