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(0);
if(!cap.isOpened())
{
return -1;
}
Mat frame;
Mat edges;
bool stop = false;
while(!stop)
{
cap>>frame;
cvtColor(frame, edges, CV_BGR2GRAY);
GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
Canny(edges, edges, 0, 30, 3);
imshow("當前視頻",edges);
if(waitKey(30) >=0)
stop = true;
}
return 0;
}
對代碼的幾點說明:
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(-1);
//創建窗口
cvNamedWindow("video", 1);
//顯示視屏
while(1)
{
pFrame=cvQueryFrame( pCapture );
if(!pFrame)break;
cvShowImage("video",pFrame);
char c=cvWaitKey(33);//讓每一幀暫停33ms
if(c==27)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攝像頭了。