【OpenCV 】 網路攝像頭
阿新 • • 發佈:2018-12-19
1 RTSP
RTSP (Real Time Streaming Protocol),是一種語法和操作類似 HTTP 協議,專門用於音訊和視訊的應用層協議。 和 HTTP 類似,RTSP 也使用 URL 地址。
海康網路攝像頭的 RTSP URL 格式如下:
rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream 1) username 使用者名稱,常用 admin 2) password 密碼,常用 12345 3) ip 攝像頭IP,如 192.0.0.64 4) port 埠號,預設為 554 5) codec 視訊編碼模式,有 h264、MPEG-4、mpeg4 等 6) channel 通道號,起始為1,例如通道1,則為 ch1 7) subtype 碼流型別,主碼流為 main,輔碼流為 sub
大華網路攝像頭的 RTSP URL 格式如下:
rtsp://[username]:[password]@[ip]:[port]/cam/realmonitor?[channel=1]&[subtype=1] 1) username、password、ip、port 同上 2) channel 通道號,起始為1,例如通道2,則為 channel=2 3) subtype 碼流型別,主碼流為0(即 subtype=0),輔碼流為1(即 subtype=1)
2 VideoCapture 類
VideoCapture 類是 OpenCV 中用來操作視訊流的類,可以在建構函式中開啟視訊,其引數支援以下三種類型:
1) name of video file (eg. `video.avi`)
2) image sequence (eg. `img_%02d.jpg`, which will read samples like `img_00.jpg, img_01.jpg, img_02.jpg, ...`)
3) URL of video stream (eg. `protocol://host:port/script_name?script_params|auth`).
// Open video file or a capturing device or a IP video stream for video capturing // VideoCapture 建構函式 CV_WRAP VideoCapture(const String& filename);
也可以構造後,再使用 open 函式來開啟
// 引數同 VideoCapture 的建構函式 CV_WRAP virtual bool open(const String& filename);
3 程式碼
下面是以海康威視的某款網路攝像頭為例,使用 OpenCV 的 VideoCapture 類來顯示實時視訊
#include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" using namespace cv; int main(int argc, char** argv) { String rtsp_addr = "rtsp://admin:[email protected]:554/MPEG-4/ch1/main/av_stream"; VideoCapture cap(rtsp_addr); // cap.open(rtsp_addr); Mat frame; for(;;) { cap >> frame; if(frame.empty()) break; imshow("Video Stream", frame); if (waitKey(10) == 'q') break; } }
附上一張園區的部分視訊截圖如下:
參考資料:
<Learning OpenCV3> chapter 8