各位大虾,小弟我在开发视频画面解析时候。用的是avicap32.dll组件开发的,我发现效率好慢!!
有个想法直接操作视频流,根据摄像头的视频流改变画面。但是我在网上找了好久没有找到C#开发的资料,如果那位大虾做过这方面的项目(人脸识别),小弟我在这里跪求学习资料。小弟我现在卡在这里了。有想法转底层了.
摄像头画面解析,比如说一个人的眼睛位置在视频画面的像素坐标(x,y);
我最初是截图做,当是发现效率好低。光遍历所有的像素点CUP都到百分50了做不下去了。
现在不知道大虾有什么好的方法!! 或者提示也行。
C++ 或者C 我都不怎么懂。(我是想用C++开发当是小弟我底层不行做不了。希望用C#开发出来)
可以用OpenCV里面的视频采集函数。
视频获取结构
typedef struct CvCapture CvCapture;
结构CvCapture 没有公共接口,它只能被用来作为视频获取函数的一个参数。
初始化从文件中获取视频
CvCapture* cvCreateFileCapture( const char* filename );
函数cvCreateFileCapture给指定文件中的视频流分配和初始化CvCapture结构。
当分配的结构不再使用的时候,它应该使用cvReleaseCapture函数释放掉。
初始化从摄像头中获取视频
CvCapture* cvCreateCameraCapture( int index );
函数cvCreateCameraCapture给从摄像头的视频流分配和初始化CvCapture结构。目前在Windows下可使用两种接口:Video for Windows(VFW)和Matrox Imaging Library(MIL); Linux下也有两种接口:V4L和FireWire(IEEE1394)。
释放这个结构,使用函数cvReleaseCapture。
释放CvCapture结构
void cvReleaseCapture( CvCapture** capture );
函数cvReleaseCapture释放由cvCaptureFromFile 或者cvCaptureFromCAM申请的CvCapture结构。
从摄像头或者视频文件中抓取帧
int cvGrabFrame( CvCapture* capture );
函数cvGrabFrame从摄像头或者文件中抓取帧。被抓取的帧在内部被存储。这个函数的目的是快速的抓取帧,这一点对同时从几个摄像头读取数据的同步是很重要的。被抓取的帧可能是压缩的格式(由摄像头/驱动定义),所以没有被公开出来。如果要取回获取的帧,请使用cvRetrieveFrame。
取回由函数cvGrabFrame抓取的图像
IplImage* cvRetrieveFrame( CvCapture* capture );
函数cvRetrieveFrame返回由函数cvGrabFrame 抓取的图像的指针。返回的图像不可以被用户释放或者修改。
从摄像头或者文件中抓取并返回一帧
IplImage* cvQueryFrame( CvCapture* capture );
函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并返回这一帧。这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用的组合。返回的图像不可以被用户释放或者修改。
可以参考这里
http://www.cnblogs.com/pangliang/archive/2010/11/21/1883566.html
OpenCV的C#版叫EmguCV
站位,我记得看过一个网页,上面是人脸识别,源码下载以后是C++写的。。