基于OpenCV打开摄像头的控制台程序

来源:互联网 发布:java class method 编辑:程序博客网 时间:2024/05/01 16:54
#include "stdio.h"#include "cv.h"#include "highgui.h"using namespace cv;/*IplImage类型*/void OpenCamera1(){/*读取摄像头 *cvCreateCameraCapture和cvCaptureFromCAM都有初始化从摄像头中获取视频的功能 *参数设置为0,打开电脑自带的摄像头;参数设置为1,打开外置的USB摄像头 */CvCapture* capture = NULL;//创建一个来自摄像头的capturecapture = 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键50msif(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;}

由于课程设计需求,要打开电脑上的摄像头,对获取的图像进行处理。在网上找了很多打开摄像头的代码,方法很多,现总结两种方法。其实只是因为图片的格式有差别,导致方法上有些略微的差别。代码如上所示,注释比较齐全。

这里总结一些IplImageMat的知识。IplImage是表示一个图像的结构体,通过cvCreateImage创建内存图像数据,创建后复制像素到创建的内存,结束之后通过cvReleaseImage等函数释放掉内存。Mat类型可以通过构造函数Mat直接创建,比较方便。

参考博客:http://blog.csdn.net/chinabinlang/article/details/40982065

运行结果:




原创粉丝点击