顯示攝像頭視頻
直接上代碼
Cv2.NamedWindow("video", WindowFlags.AutoSize);
Cv2.ResizeWindow("video", 640, 480);
//獲取視頻設備
FrameSource frame = Cv2.CreateFrameSource_Camera(0);
Mat mat = new Mat();
//逐幀放入
while (true)
{
//從攝像頭讀視頻幀
frame.NextFrame(mat);
//視頻幀在視窗中顯示
Cv2.ImShow("video", mat);
Cv2.WaitKey(1);
}
這里我們主要用了這個方法來打開攝像頭,引數為攝像頭索引
FrameSource frame = Cv2.CreateFrameSource_Camera(0);
然后讀取攝像頭的每一幀
frame.NextFrame(mat);
然后我們將每一幀做了顯示
Cv2.ImShow("video", mat);
成功打開攝像頭

顯示媒體視頻
顯示媒體視頻的方法基本和顯示攝像頭的相同
Cv2.NamedWindow("video", WindowFlags.AutoSize);
Cv2.ResizeWindow("video", 640, 480);
//通過媒體檔案讀取視頻幀
FrameSource frame = Cv2.CreateFrameSource_Video(@"C:\Users\Mr_chong\Music\MV\11.mp4");
Mat mat = new Mat();
//逐幀放入
while (true)
{
//從攝像頭讀視頻幀
frame.NextFrame(mat);
//視頻幀在視窗中顯示
Cv2.ImShow("video", mat);
Cv2.WaitKey(40);
}
只有該方法存在差異,引數為媒體檔案的路徑
FrameSource frame = Cv2.CreateFrameSource_Video(@"C:\Users\Mr_chong\Music\MV\11.mp4");

視頻錄制
視頻錄制的方法也比較簡單,只需要使用VideoWriter類進行錄制,將獲取到的每幀畫面放入,并設定路徑和輸出格式即可
VideoWriter videoWriter = new VideoWriter(@"./out.avi", VideoWriter.FourCC(@"XVID"), 20, new Size(640, 480));
VideoWriter.FourCC 引數為視頻檔案格式,XVID對應輸出avi格式視頻 ,MJPG對應輸出MP4格式視頻,其余的大家可以查詢,該方法第一個引數為視頻輸出路徑,第二個引數為格式,第三個引數為保存的幀率,第四個引數為尺寸建議為攝像頭尺寸,否則可能無法保存,
下面附上代碼,之前的代碼都是CV2風格的代碼,這次使用C#風格的代碼形式,注釋都標注了大家可以自己對應下CV2風格的代碼,
Window window = new Window("video");
window.Resize(640, 480);
VideoCapture video = new VideoCapture(0);
VideoWriter videoWriter = new VideoWriter(@"./out.avi", VideoWriter.FourCC(@"XVID"), 20, new Size(640, 480));
Mat mat = new Mat();
while (video.IsOpened())
{
//從攝像頭讀視頻幀
if (video.Read(mat))
{
videoWriter.Write(mat);
//視頻幀在視窗中顯示
window.ShowImage(mat);
var key = Cv2.WaitKey(1);
if (key == 27)
{
break;
}
}
else
{
break;
}
}
//釋放資源
video.Release();
mat.Release();
Cv2.DestroyAllWindows();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/348528.html
標籤:其他
