记得在大一的时候就有一些想法:用程序去驱动硬件工作。比如摄像头,马达,齿轮,显示器等等,后来学了一段单片机也可以用它来控制一些简单的东西,再后来考研了,把单片机,arm束之高阁了,很久了,很多都遗忘了,但是这些想法还一直萦绕在心头,由于搞了图像处理这一行,所以就一直想着去驱动摄像头工作,采集图像,之前没有涉及都是用的国外的图像库进行处理的,一直也想尝试一下用程序控制一下摄像头,原来opencv里面调用摄像头如此的简单,还用它拍了几张照片很好,很强大。哈哈。继续努力。
程序如下:
// myjob.cpp : 定义控制台应用程序的入口点。
//
/**********************************/
//opencv摄像头驱动
/**********************************/
#include "stdafx.h"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "cv.h"
#include"highgui.h"
#include "iostream"
//采用cv命名空间和标准命名空间
using namespace std;
using namespace cv;
int main()
{
namedWindow("mycam",1);//创建窗口
VideoCapture cam(0);//捕获摄像头,
if(!cam.isOpened())//判断摄像头是否成功打开
{return -1;}
Mat frame;//捕获帧
Mat gray,edge;
bool stop =false;
while(!stop)
{
cam>>frame;//将摄像头捕获的帧存储到frame中
imwrite("彩色图像.jpg",frame);
cvtColor(frame,gray,CV_BGR2GRAY);//转换为灰度图像
GaussianBlur(gray,edge,Size(7,7),1.5,1.5);//高斯平滑
Canny(edge,edge,0,20,3);//用canny求边缘
imshow("mycam",edge);//显示边缘图像。
imwrite("myface.jpg",edge);//存储边缘图像
if(waitKey(1000)>=0)
stop = true;
}
return 0;
}