OpenCV 笔记(03)— 读取视频、通过摄像头采集视频、采集视频 canny 边缘检测
生活随笔
收集整理的這篇文章主要介紹了
OpenCV 笔记(03)— 读取视频、通过摄像头采集视频、采集视频 canny 边缘检测
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
我們本節(jié)學(xué)習(xí)如何利用 OpenCV 中的 VideoCapture 類,來對視頻進(jìn)行讀取顯示,以及調(diào)用攝像頭。
VideoCapture 它提供了從攝像機或視頻文件捕獲視頻的 C++ 接口, 作用是從視頻文件或從攝像頭捕獲視頻并顯示出來。
1. 讀取并播放視頻
VideoCapture 讀入視頻方法有兩種:
- 先實例化再初始化:
VideoCapture capture;
capture.open("demo.mp4");
- 在實例化的同時進(jìn)行初始化:
VideoCapture capture("demo.mp4");
這兩種寫法的區(qū)別就如我們定義一個 int 類型的變量一樣:
int a;
a = 1;
為先定義再初始化,而
int a = 1;
為在定義時初始化。
完整代碼:
#include <iostream>
#include "opencv2/opencv.hpp"using namespace cv; int main()
{VideoCapture capture("demo.mp4"); // 讀入視頻if(!capture.isOpened()) // 判斷文件是否正確打開{std::cout << "video not exist";return -1;}while(1) // 循環(huán)顯示每一幀{Mat frame; // 定義一個Mat 變量, 用于存儲每一幀的圖像capture >> frame; // 讀取當(dāng)前幀到 Mat 變量中 imshow("讀取視頻", frame); // 顯示當(dāng)前幀 waitKey(30); // 延時 30 ms}capture.release(); //釋放資源return 0;
}
2. 通過攝像頭采集視頻
要調(diào)用攝像頭進(jìn)行視頻采集的話,將代碼
VideoCapture capture("demo.mp4")
替換為
VideoCapture capture(0)
表示從攝像頭而不是從文件中讀取視頻。其它代碼和通過讀取視頻文件播放視頻代碼一致,完整代碼如下:
#include <iostream>
#include "opencv2/opencv.hpp"using namespace cv; int main()
{VideoCapture capture(0); // 讀入視頻if(!capture.isOpened()) // 判斷文件是否正確打開{std::cout << "video not exist";return -1;}while(1) // 循環(huán)顯示每一幀{Mat frame; // 定義一個Mat 變量, 用于存儲每一幀的圖像capture >> frame; // 讀取當(dāng)前幀到 Mat 變量中 imshow("讀取視頻", frame); // 顯示當(dāng)前幀 waitKey(30); // 延時 30 ms}capture.release(); //釋放資源return 0;
}
3. 采集視頻并做 canny 檢測
我們還可以用上面的攝像頭調(diào)用示例程序來配合 canny 邊緣檢測, 得到 canny 邊緣檢測并高斯模糊后的攝像頭采集視頻,源碼如下:
#include <iostream>
#include "opencv2/opencv.hpp"using namespace cv; int main()
{VideoCapture capture(0); // 從攝像頭讀入視頻if(!capture.isOpened()) // 判斷文件是否正確打開{std::cout << "video not exist";return -1;}Mat edges;while(1) // 循環(huán)顯示每一幀{Mat frame; // 定義一個Mat 變量, 用于存儲每一幀的圖像capture >> frame; // 讀取當(dāng)前幀到 Mat 變量中 cvtColor(frame, edges, COLOR_BGR2GRAY); // 轉(zhuǎn)換 BGR 圖為灰度圖// 使用 3x3 內(nèi)核降噪 2x3+1=7blur(edges, edges, Size(7, 7)); // 進(jìn)行模糊// 進(jìn)行 canny 邊緣檢測并顯示Canny(edges, edges, 0, 30, 3);imshow("邊緣檢測并模糊后的視頻", edges); // 顯示當(dāng)前幀 waitKey(30); // 延時 30 ms}capture.release(); //釋放資源return 0;
}
總結(jié)
以上是生活随笔為你收集整理的OpenCV 笔记(03)— 读取视频、通过摄像头采集视频、采集视频 canny 边缘检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022-2028年中国热熔胶产业竞争现
- 下一篇: 2022-2028年中国文化旅游业投资分