• Kinect+c#视频录像


    使用的是vs2012+c#

    如遇到Emgu.CV.CvInvoke 的类型初始值设定项引发异常,要有Emgu配置

    VS2010C#与 Emgu CV 配置

    1、安装 双击安装文件,一路下一步、我同意,配置安装到 C:Program FilesEmguemgucv-windows-universal-gpu 2.4.9.1847

    2、设置环境变量(设置之后需重启计算机或注销): PATH (添加如下一行; 如无 PATH, 可自行新建; 如修改了 Emcu CV 的默认安装路径, 请自行修改成相应路径):

    ;C:Program FilesEmguemgucv-windows-universal-gpu 2.4.9.1847inx86

    在用户和系统变量中设置如下的三个路径.

    • C:Emguemgucv-windows-universal-gpu 2.4.9.1847in;

    • C:Emguemgucv-windows-universal-gpu 2.4.9.1847inx64;

    • C:Emguemgucv-windows-universal-gpu 2.4.9.1847inx86;

    3、新建项目 新建一个解决方案,并建立一个基于 C#下的 Windows 窗体应用程序的项目 Emgu CV Test

    4、导入 UI 插件 点击“工具(T)”->“选择工具箱项(X)…”,在新打开的窗口中选择:“.NET Framework 组件”,点击“浏览”,到目录:D:Program FilesEmguemgucv-windows-universal-gpu 2.4.9.1847in 下,双击Emgu.CV.UI.dll 即可。 看到如图四项之后,点击确定即可。

    5、添加引用 右键单击“解决方案资源管理器”中 Emgu CV Test 项目下的“引用”,选择“添加引用”; 在新弹出的窗口中选择“浏览”,到目录:D:Program FilesEmguemgucv-windows-universal-gpu 2.4.9.1847in 下,选择:Emgu.CV.dll、 Emgu.CV.ML.dll、Emgu.CV.UI.dll、Emgu.Util.dll、ZedGraph.dll 等共五个 DLL 文件,并点 击确定加入。 常见错误解决方案:

    1、如遇错误提示:tbb_debug.dll 找不到 请下载安装 Intel TBB 库, 需要将 tbb 库或 dll 文件所在路径, 配置带系统环境变量 path 中。

    2、如遇错误提示:“Emgu.CV.CvInvoke”的类型初始值设定项引发异常

    (1)注销或重启计算机,使得系统环境变量中的 path 生效;

    (2)通过 path 中设置的路径去寻找对应的 dll 文件,查看是否存在,是否被成功引用到 VS 中;

    (3)copy dll 文件到 debug 和 release 目录中。

    (4)尝试将.Net FrameWork 版本降低,如果是 4.0 的就降低到 3.5,如果是 3.5 的就降 低到 2.0。

    这个网上还是很多教程的,先是看了VS2010+C#+EmguCV读取和录制视频里面启发很大,关键代码是

    private void Play_Click(object sender, EventArgs e)
            {
                if (Play.Text == "播放")
                {//开启播放模式
                    OpenFileDialog openFileDialog = new OpenFileDialog();
                    openFileDialog.Filter = "AVI文件|*.avi|RMVB文件|*.rmvb|WMV文件|*.wmv|MKV文件|*.mkv|所有文件|*.*";
                    if (openFileDialog.ShowDialog() == DialogResult.OK)
                    {
                        Application.Idle += new EventHandler(ProcessFrame);
                        capture = new Capture(openFileDialog.FileName);
                        VideoFps = (int)CvInvoke.cvGetCaptureProperty(capture,
                        Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FPS);
                        Play.Text = "停止";
                        VideoBox.Image = null;
                        Record.Enabled = false;
                    }
                }
                else
                {
                    capture.Dispose();
                    Application.Idle -= new EventHandler(ProcessFrame);
                    Play.Text = "播放";
                    Record.Enabled = true;
                }
            }

    下面写出的是根据csdn上一个前辈分享的案例,但是一直报错,如果你环境安装正确了,那么路子就正了,下面也是关键代码

            /// <summary>
            /// 每一帧彩色图像变化时调用该函数,更新彩色image控件的图像
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void kinectSensor_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
            {
                using (ColorImageFrame frame = e.OpenColorImageFrame())
                {
                    if (frame != null)
                    {
                        colorImagePixelData = new byte[frame.PixelDataLength];
                        frame.CopyPixelDataTo(colorImagePixelData);
                        this.colorImageBitmap.WritePixels(this.colorImageBitmapRect,
                            colorImagePixelData, this.colorImageStride, 0);
                        Record(frame);
                    }
                }
            }
    
            void Record(ColorImageFrame image)
            {
                if (_isRecording == 0)
                {
                    _fileName = string.Format("{0}{1}{2}", _baseDirectory, DateTime.Now.ToString("MMddyyyyHmmss"), ".AVI");
                    _isRecording = 1;
                    vw = new VideoWriter(_baseDirectory + "1.avi", CvInvoke.CV_FOURCC('X', 'V', 'I', 'D'), 30, 640, 480, true);
                    CvInvoke.CV_FOURCC('P', 'I', 'M', '1'); //= MPEG-1 codec 
                    CvInvoke.CV_FOURCC('M', 'J', 'P', 'G'); //= motion-jpeg codec (does not work well) 
                    CvInvoke.CV_FOURCC('M', 'P', '4', '2');//= MPEG-4.2 codec 
                    CvInvoke.CV_FOURCC('D', 'I', 'V', '3');  //= MPEG-4.3 codec 
                    CvInvoke.CV_FOURCC('D', 'I', 'V', 'X'); //= MPEG-4 codec 
                    CvInvoke.CV_FOURCC('U', '2', '6', '3'); //= H263 codec 
                    CvInvoke.CV_FOURCC('I', '2', '6', '3'); //= H263I codec 
                    CvInvoke.CV_FOURCC('F', 'L', 'V', '1'); //= FLV1 codec 
                }
                //_videoArray.Add(image.ToOpenCVImage<Rgb, Byte>());
    
                if (_isRecording == 1) vw.WriteFrame<Bgr, Byte>(image.ToOpenCVImage<Bgr, Byte>());
                if (_isRecording == 2)
                {
                    if (vw != null) vw.Dispose();
    
                }
            }
  • 相关阅读:
    lua 10 迭代器
    lua 9 parttern 字符极其简要的介绍
    lua 7 运算符
    lua 6 函数
    lua 5 流程控制 if
    线程池的设计问题/线程数量计算
    一个父子进程管道通信的复习
    redis 网络库文件 重构
    带标准IO带缓存区和非标准IO 遇到fork是的情况分析
    libevent 同性恋 讲解
  • 原文地址:https://www.cnblogs.com/bkycjj/p/3572371.html
Copyright © 2020-2023  润新知