OpenCVSharp学习笔记(三)显示摄像头视频和媒体视频&录制

本文介绍如何使用C#实现摄像头视频的显示与录制,包括创建窗口、读取视频帧及显示等关键步骤。同时,还提供了从媒体文件读取并显示视频的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

显示摄像头视频

直接上代码

            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();
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code-Study

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值