本文共 1492 字,大约阅读时间需要 4 分钟。
#include "stdio.h"#include "cv.h"#include "highgui.h"using namespace cv;/*IplImage类型*/void OpenCamera1(){ /*读取摄像头 *cvCreateCameraCapture和cvCaptureFromCAM都有初始化从摄像头中获取视频的功能 *参数设置为0,打开电脑自带的摄像头;参数设置为1,打开外置的USB摄像头 */ CvCapture* capture = NULL; //创建一个来自摄像头的capture capture = cvCreateCameraCapture(0); //capture = cvCaptureFromCAM(0); IplImage* frame; cvNamedWindow("Show1"); while(1){ //从capture中读取下一帧画面,在while循环中不断调用这一句,就能不断得到新画面 frame = cvQueryFrame(capture); if(!frame) break; cvShowImage("Show1",frame); /*cvWaitkey(int delay)函数 *当delay小于等于0的时候, *如果没有键盘触发,则一直等待,此时的返回值为-1,否则返回值为键盘按下的码字; *当delay大于0时, *如果没有键盘的的触发,则等待delay的时间,此时的返回值是-1,否则返回值为键盘按下的码字。 */ char c = cvWaitKey(50);//等待用户按下Esc键50ms if(c==27) break;//如果按下Esc键,退出循环 } cvReleaseCapture(&capture); cvDestroyWindow("Show1");}/*Mat类型*/int OpenCamera2(){ //VideoCapture类的构造函数 VideoCapture capture(0);//参数为0,表示打开默认摄像头 if(!capture.isOpened())//检测摄像头是否正常打开 return -1; namedWindow("Show2"); Mat frame; while(1){ capture>>frame;//从摄像头获取当前一帧图像 if(frame.empty()) break; imshow("Show2",frame); if(waitKey(50)>=0) break; } //摄像头会在VideoCapture的析构函数中释放 return 0;}int main(){ OpenCamera1(); //OpenCamera2(); return 0;}
由于课程设计需求,要打开电脑上的摄像头,对获取的图像进行处理。在网上找了很多打开摄像头的代码,方法很多,现总结两种方法。其实只是因为图片的格式有差别,导致方法上有些略微的差别。代码如上所示,注释比较齐全。
这里总结一些IplImage与Mat的知识。IplImage是表示一个图像的结构体,通过cvCreateImage创建内存图像数据,创建后复制像素到创建的内存,结束之后通过cvReleaseImage等函数释放掉内存。Mat类型可以通过构造函数Mat直接创建,比较方便。
参考博客:http://blog.csdn.net/chinabinlang/article/details/40982065
运行结果: