一、虚拟机无法识别摄像头
虚拟机系统无法识别摄像头,而摄像头是正常的,可以进行识别,而在虚拟机移动设备上找不到摄像头,解决办法是将虚拟机重新安装,只是重装VMwareWorkstation,因为VMwareWorkstation存在漏洞,重装VMwareWorkstation只需在网上下载一个安装即可,不许卸载以前的安装,这样就可识别摄像头。
二、摄像头采集图片的方法
方法一: 使用V4L2采集视频数据。一般V4L2采集视频数据分为五个步骤:首先,打开视频设备文件,进行视频采集的参数初始化,通过V4L2接口设置视频图像的采集窗口、采集的点阵大小和格式;其次,申请若干视频采集的帧缓冲区,并将这些帧缓冲区从内核空间映射到用户空间,便于应用程序读取/处理视频数据;第三,将申请的帧缓冲区在视频采集输入队列排队,并启动视频采集;第四,驱动开始视频数据的采集,应用程序从视频采集输出队列取出帧缓冲区,处理完后,将帧缓冲区重新放入视频采集输入队列,循环往复采集连续的视频数据;第五,停止视频采集。
方法二:使用opencv库函数
CvCapture * capture=cvCreateCameraCapture(0); 打开摄像头
IplImage* frame=cvQueryFrame(); 读入视频
保存图片:cvSaveImage(“picture”,frame);
保存视频:CvVideoWriter* writer=0;
Writer=cvCreateVideoWriter(“out.avi”,CV_FOURCC(‘F’,‘L’,‘V’,‘1’),fps,cvSize(frame->width,frame->height),isColol);
cvWriterFrame(writer,frame);
三、采集BMP格式的图片,BMP图片的头错误
BMP格式的图片包括文件头、图像头和图像信息。文件头和图像头总共54个字节,文件头14个字节,图像头40个字节。
42 4D:对应的是字母“BM”,即bf.bfType=0x4d42;
36 30 01 00:表示图文件的大小尺寸,文件尺寸为0x00013036,即bf.bfSize=54+bi.biSizeImage;
00 00 00 00:保留位,用来存储文件大小数据,即bf.bfReserved=0;
36 04 00 00:位图颜色数据域相对文件开始处的偏移量,即bf.bfofiBits=54;
28 00 00 00:位图信息头,0x00000028=40,即biSize=40;
40 01 00 00:位图宽度,即biWidth=320;
F0 00 00 00:位图高度,即biHeight=240;
01 00:位图设备级别,即biPlanes=1;
08 00:位图级别,即biBitCount=8;
00 00 00 00:压缩类型,即biCompression=0;
00 00 00 00:图像信息区域,表示图像的颜色数据区,即biSizeImage=ImageWidth*ImageHeight*3;每个像素占3字节
C4 0E 00 00:颜色变址数,即biClrUsed=3652;
C4 0E 00 00:重要颜色变址数,即biClrImportant=3652;
00 01 00 00:水平分辨率,即biXPelsPerMeter=64;
00 01 00 00:垂直分辨率,即biYPelsPerMeter=64;
图片头文件错误,起初是将头的14个字节一起写入fwrite(&bf,14,1,fp1),会出错,解决办法是将头文件一个一个字节写入fwrite(&bf,2,1,fp1),就可以读取正确的图片。