July 28, 2016
作者:dengshuai_super
出处:http://blog.csdn.net/dengshuai_super/article/details/52057828
声明:转载请注明作者及出处。
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
using namespace cv;
int main()
{
VideoCapture cap();
if(!cap.isOpened())
{
return -;
}
Mat frame;
Mat edges;
bool stop = false;
while(!stop)
{
cap>>frame;
cvtColor(frame, edges, CV_BGR2GRAY);
GaussianBlur(edges, edges, Size(,), , );
Canny(edges, edges, , , );
imshow("当前视频",edges);
if(waitKey() >=)
stop = true;
}
return ;
}
对代码的几点说明:
1. VideoCapture类有两种用法,一种是VideoCapture(const string& filename)用来打开视频文件,一种是VideoCapture(int device)用来打开设备。
2. isOpened函数用来检测VideoCapture类是否打开成功。
3. C++版本的OpenCV有一个明显的好处,就是不需要释放操作(不论是视频还是图片),VideoCapture类的析构函数会自动帮你完成。
下面这段程序是打开摄像头并显示摄像头的。
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
int main( int argc, char** argv )
{
//声明IplImage指针
IplImage* pFrame = NULL;
//获取摄像头
CvCapture* pCapture = cvCreateCameraCapture(-);
//创建窗口
cvNamedWindow("video", );
//显示视屏
while()
{
pFrame=cvQueryFrame( pCapture );
if(!pFrame)break;
cvShowImage("video",pFrame);
char c=cvWaitKey();//让每一帧暂停33ms
if(c==)break; //ESC,ASCⅡ码27回车,ASCⅡ码13换行(Ctrl + Enter),ASCⅡ码10空格,ASCⅡ码32
}
cvReleaseCapture(&pCapture);
cvDestroyWindow("video");
}
在Macbook pro 上,上面两段代码我都可以跑通,都可以调取自带的摄像头。
摄像头可以在系统信息—>相机 查看:
FaceTime 高清相机(内建):
型号 ID: UVC Camera VendorID_1452 ProductID_34057
唯一 ID: 0x1a11000005ac8509
UVC,全称为:USB video class 或USB video device class。是Microsoft与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标准,目前已成为USB org标准之一。因此就相当于调用USB摄像头了。