|
本人小白一名,刚上手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.如果需要进一步定位,如何操作?
|
|