原文:http://www.cnblogs.com/zkwarrior/p/4868991.html
http://blog.csdn.net/thefutureisour/article/details/7530177
在網上看了許多關於OpenCV啟動攝像頭的資料,但是,都是基於C語言的,代碼又臭又長,(其實主要是因為我學的OpenCV就是用C++的,C語言的基本數據結構不太熟悉),所以一直想找一個用C++寫的程序,最后讓我在OpenCV自帶的英文參考手冊上找見了,整個代碼30行都不到!nice啊!我對代碼做了一點修改,發上來吧!
- #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類的析構函數會自動幫你完成。
由於本人長相丑陋,所以對攝像頭獲取的彩色圖像進行了一些簡單的處理:轉為灰度圖像、高斯濾波,邊沿檢測。這樣大家就不會受驚了,哈哈!