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

#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;
}

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

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

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

运行结果:




  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值