• 11353阅读
  • 5回复

关于摄像头捕捉图像2 [复制链接]

上一主题 下一主题
离线skly22222
 

只看楼主 倒序阅读 楼主  发表于: 2006-03-27
我做的不知道是不是和obrire的一样,但我想摄像头数据截取不分应该是差不多的,
源代码我是不能说的,因为像obrire说的涉及到商业.
基本流程是这样的:先调用系统函数open(dev,O_RDWR);然后开辟共享内存adrr=mmap();adrr是内存首地址;
再调用ioctl (dev, VIDIOCMCAPTURE, &vid_mmap);ioctl (dev, VIDIOCSYNC, &vid_mmap.frame);得到图像;
然后再操作adrr就行了;
注意:没用每用完一次mmap()要记得把他销毁munmap(adrr, size);不然它会从新开辟另一块内存.直到系统内存
被用完.
显示的时候建议先把图像数据拷贝到自己开辟的内存里再对数据进行处理,显示\压缩什么的随你;
显示我的思想方法是,先创建一个Image;然后把数据放到Image里;最后painter出来;
离线wc16

只看该作者 1楼 发表于: 2006-03-27
skyly2222,你能不能把最后一步image(),这个参数,我设置不好..,显示效果烂的很..
我只需要几行代码,就是qt部分,其他部分,我已经做完了。
离线skly22222

只看该作者 2楼 发表于: 2006-03-27
你能用的是
QImage ( uchar * yourdata, int w, int h, int depth, QRgb * colortable, int numColors, Endian bitOrder );
这个函数吧?
这个函数我试过,不行,因为colortable设置不好会倒置象素放大或缩小造成图像混乱;
我是这样解决的.
QRgb rgb;
QPainter *paint=new QPainter;
i=0;
if(bm.create(width,height,32,0,QImage::IgnoreEndian))
{        for (x = 0; x < height ; x++) {
           for (y = 0; y <width; y++) {
          r=(int)bit[i+2];
          g=(int)bit[i+1];
          b=(int)bit;
      uint *pp = (uint *)bm.scanLine(x) + y;
        *pp = qRgb(r,g,b);
          i=i+3;
                          }
                    }

}

看得懂的就好,看不懂的我也没办法了.
离线ljq206

只看该作者 3楼 发表于: 2006-05-17
我想请教skly22222,我按照上面步骤写了一个数据采集程序,在QT程序中把它作为 .c文件在工程编译的时候出了问题,原因好像是这部分关于linux下的头文件找不到,但把这个程序作为.h文件时就没有这种问题了,想知道这部分程序是否可以作为.h文件调用,另外我上面问题怎么解决。路过的各位大侠也请不吝赐教,谢谢!!
离线forestxiehu

只看该作者 4楼 发表于: 2006-07-01
skly22222,多谢了,我在用图像处理作毕业设计,也是刚用QT,你的这些代码很有用,QT资料太少了,尤其在图像处理这一方面,有没有好的网站或资料介绍一下,让我们少走些弯路!
离线stephaniez

只看该作者 5楼 发表于: 2008-04-25
是啊,QT做图像处理这一块资料真的很少,只有它的帮助文档,请问还有没有其他的比较系统的书籍和网站等资料啊。
快速回复
限100 字节
 
上一个 下一个