直接上代码
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();