opencv打开摄像头并新建窗口显示
几个程序使用的基本函数如下:
*******************************************************************
cvCreateCameraCapture
初始化从摄像头中获取视频
CvCapture* cvCreateCameraCapture( int index );
- index 要使用的摄像头索引。如果只有一个摄像头或者用哪个摄像头也无所谓,那使用参数-1便可以。
函 数cvCreateCameraCapture给从摄像头的视频流分配和初始化CvCapture结构。目前在Windows下可使用两种接 口:Video for Windows(VFW)和Matrox Imaging Library(MIL); Linux下也有两种接口:V4L和FireWire(IEEE1394)。
释放这个结构,使用函数cvReleaseCapture。
返回值为一个
CvCapture
************************************************************************************************
CvCapture
视频获取结构
typedef struct CvCapture CvCapture;
结构CvCapture 没有公共接口,它只能被用来作为视频获取函数的一个参数。
******************************************************************************
cvQueryFrame
从摄像头或者文件中抓取并返回一帧
IplImage* cvQueryFrame( CvCapture* capture );
capture
视频获取结构。
函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并返回这一帧。 这个函数仅仅是函数cvGrabFrame和 函数cvRetrieveFrame在一起调用的组合。 返回的图像不可以被用户释放或者修改。
cvQueryFrame的参数为CvCapture结构的指针。用来将下一帧视频文件载入内存,返回一个对应当前帧的指针。与cvLoadImage不 同的是cvLoadImage为图像分配内存空间,而cvQueryFrame使用已经在CvCapture结构中分配好的内存。这样的话,就没有必要通 过cvReleaseImage()对这个返回的图像指针进行释放,当CvCapture结构被释放后,每一帧图像所对应的内存空间即会被释放。
如果抓取帧为空 break 打破循环
否则将抓取的那一帧显示在创建的窗口上
cvShowImage("video",pFrame);
当前帧显示后
char c=cvWaitKey(33);
if(c==27)break;
我们等待33ms
如果用户触发了按键,将按键的ASCII值给C
如果C为ESC(ASCII 为27)循环退出
最后释放capture 和window
cvReleaseCapture(&pCapture);
cvDestroyWindow("video");
最后释放占用资源
程序代码如下:
======================================================================
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #include <cv.h> #include <cxcore.h> #include <highgui.h> #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") int main( int argc, char ** argv) { //声明IplImage指针 IplImage* pFrame = NULL; //获取摄像头 CvCapture* pCapture = cvCreateCameraCapture(-1); //创建窗口 cvNamedWindow( "video" , 1); //显示视屏 while (1) { pFrame = cvQueryFrame(pCapture); if (!pFrame) break ; cvShowImage( "video" , pFrame); char c = cvWaitKey(33); if (c == 27) break ; } cvReleaseCapture(&pCapture); cvDestroyWindow( "video" ); }<br><br><br><br> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了