当我在C#中使用 Emgu 尝试从 avi文件 捕获视频时,我收到了null-reference-exception。
捕获捕获=新捕获(“somepath.avi”)
我的操作系统上安装了K-Lite Codec。 这是堆栈跟踪:
> at Emgu.CV.Capture..ctor(String fileName)
>
> at HelloWorld.Program.Main() in D:\5th year stuff\1st Semester\Computer
> Vision\libemgucv-2.1.0.793-win64\Emgu.CV.Example\HelloWorld\Program.cs:line
> 30
>
> at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
>
> at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
>
> at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
>
> at System.Threading.ThreadHelper.ThreadStart()
答案 0 :(得分:2)
仔细检查您的avi文件是否与opencv兼容。你应该使用mencoder并使用适当的编解码器转换它,如here所述。 一个受支持的编解码器是原始的I420。您可以使用此命令将avi转换为I420 one with mencoder
mencoder inputVideo.avi -ovc raw -vf format=i420 -o convertedVideo.avi
答案 1 :(得分:0)
我遇到了同样的问题。我使用名为FFmpeg的视频编解码器将.MOV文件转换为.AVI,当我将opencv_ffmpeg.dll添加到我的项目时,它工作正常。 dll位于Emgu包的bin目录中。尝试找出你的.avi文件使用的编解码器,并检查该编解码器是否有dll。将dll复制到项目目录,记住将“Copy if newer”设置为文件的“Copy local”属性,看看它是否有效。我使用了一个名为“Pazera Free Mov to Avi”的软件来转换具有不同编解码器选项的视频文件。