前幾天用java的JMF來打開攝像頭,現在我用opencv來打開攝像頭。下面是操作的具體細節
1.下載下傳和安裝opencv
在官網opencv.org 下載下傳 OpenCV windows版下載下傳下來。(我下載下傳的是opencv-3.1.0.exe),下載下傳後安裝自動解壓,選擇安裝位置就行了。
2.配置環境變量
計算機 > 右鍵屬性> 進階系統設定 > 環境變量> 系統變量
Path 下添加opencv 的路徑 如:…… opencv\build\x64\vc12\bin;
Opencv 3.1.0 版本隻有x64位的,這裡的vc12 = vs2013 ,根據自己安裝的vs版本來選擇
3.工程包含目錄配置
打開vs 2013 ,檔案>建立>項目 > visual C++ >Win32 控制台應用程式
點選剛才建立的項目右鍵 > 添加> 建立項
在視圖 >其他視窗> 打開屬性管理器
點選項目->Debug|Win32->Microsoft.Cpp.Win32.User(右鍵屬性,或者輕按兩下)即可打開屬性頁面。
打開屬性頁面後,就是一番配置了。首先是在
一.通用屬性 > VC++目錄 > 包含目錄
添加opencv安裝目錄中的... \opencv\bulid\include
二. 通用屬性 > VC++目錄 > 庫目錄
添加 ....opencv\build\x64\vc10\lib
三. 通用屬性 > 連結器 > 輸入 >附加的依賴項
opencv_world310d.lib
如果編譯時出現; 子產品計算機類型“X86”與目标計算機類型“x64”沖突
解決辦法:
點選項目右鍵 > 屬性 > 把平台選為X64> 配置管理器 > 活動解決方案平台 選X64 (沒有就建立)> 然後在連接配接器 >進階 > 目标計算機 (MachineX64 )
配置完有時候需要重新開機計算機才生效
下面是打開攝像頭的代碼:
整體思路:
1)添加包含檔案opencv
2)建立對象,擷取視訊流
3)建立視窗,把擷取的視訊流顯示出來
4)如果關閉,就釋放擷取視訊流的對象
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\opencv.hpp>
using namespace cv;//命名空間
int main()
{
VideoCapture capture(0);//建立VideoCapture對象
if (!capture.isOpened())//判斷是否打開攝像頭,打開isOpened傳回ture
return 1;
bool stop(false);//定義一個用來停止循環的變量
Mat frame;//用來存放讀取的視訊序列,承載每一幀的圖像 ,Mat類是用于儲存圖像以及其他矩陣資料的資料結構
namedWindow("Camera");//建立一個視窗,顯示每一幀的視窗
while (!stop)
{
if (!capture.read(frame))//如果沒有讀取到就中斷
{
break;
}
imshow("Camera", frame);//正常顯示,把擷取的視訊填充到視窗中
char c = cvWaitKey(33);
if (c == 32)break; //使用空格鍵來停止ASCII 為32
}
capture.release();//釋放
}
對于JMF 和opencv 來打開攝像頭,這兩個操作方法我都嘗試過,對于二者我說說自己的一些想法,在沒有做這個項目的時候,我認為很簡單的,但事實好像不是這樣,因為沒有頭緒,一切都是在網上找的資料,找了很多資料,又發現很多用不了,那個時候才感覺困難重重。但是還好我還是找到了解決方法。二者的環境安裝配置都是比較麻煩的。我是這樣認為的。對于JMF來說opencv感覺更不錯,代碼簡潔更清晰。