OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 4255|回复: 2

(VS2012 C# + EmguCV)无法从文件创建Cpature,还请各位大侠帮忙

[复制链接]
发表于 2015-5-22 09:56:43 | 显示全部楼层 |阅读模式
本人小白一名,刚上手EmguCV,问题可能比较低级,请大家见谅。

VS2012 C# + EmguCV:

安装好了EmguCV(emgucv-windows-universal-cuda 2.4.10.1940),按网上教程设置好系统变量Path。
单独下载解码器K-Lite Code Pack(K-Lite_Codec_Pack_1110_Full),也试过Xvid(Xvid-1.3.3-20141019)
编写以下函数:
public bool CaptureBitmaps(String vedioFile, String outputPath)
        {
            String SouceFlieShortName = Path.GetFileNameWithoutExtension(vedioFile) + "_";
            try
            {
                _capture = new Capture(VedioFile);  //此处抛出异常
                _capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT, Height);
                _capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH, Width);
                FrameRate = _capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FPS);
                TotalFrame = _capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_COUNT);
                codec_double = _capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FOURCC);
                CodecString = new string(System.Text.Encoding.UTF8.GetString(BitConverter.GetBytes(Convert.ToUInt32(codec_double))).ToCharArray());
                double FrameNo = _capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_POS_FRAMES);
                var frame = _capture.QueryFrame();
                while (frame != null)
                {
                    Bitmap theBitmap = frame.ToBitmap();
                    theBitmap.Save(SouceFlieShortName+Convert.ToInt32(FrameNo).ToString("0000") + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                    FrameNo = _capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_POS_FRAMES);
                    frame = _capture.QueryFrame();
                }
                _capture.Dispose();
                _capture = null;            
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message.ToString());
                return false;
            }
            return true;
        }

执行程序,输入文件“.\vedio\testoo1.mp4”结果出现异常:
Unable to create capture from .\vedio\testoo1.mp4

参考网上的其他案例,试过一些解码器,也未能解决问题。该视频文件采用K-Lite Code Pack自带的播放器可以正常播放。
怀疑视频文件格式,试了一个windows media palyer可以直接播放的视频,问题依旧。

还请各位大侠帮忙:
1.问题可能出现在哪里?
2.如果需要进一步定位,如何操作?







回复

使用道具 举报

 楼主| 发表于 2015-5-22 16:48:59 | 显示全部楼层
问题解决了,希望对大家有帮助:

1.安装了个ffmpeg(实话说不知道是否有用,版本ffmpeg-20150522-git-f99fed7-win32-static.7z)
2.下载了最新的EmguCV版本(libemgucv-windows-universal-3.0.0.2132-rc1.exe)
3.还有一个比较低级的问题,我的机器是Intel显卡,不能用带CUDA的版本,所以下载EmguCV的时候要选对版本
回复 支持 反对

使用道具 举报

发表于 2015-9-4 10:37:46 | 显示全部楼层
有解码器的情况下,可以直接读取MP4的文件?不用事先转化为AVI格式的?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-4-20 14:09 , Processed in 0.009785 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表