C#学习教程:在C#中使用Emgu.CV的System.TypeInitializationException该图像然后保存到硬盘驱动器并显示在Windows窗体GUI中。返回图像的相机接口内部函数如下:高度和宽度都是整数,是相机接口类的一部分。在本例中,它们被设置为800x600。publicImageQueryFrame(){图像温度;锁定(键){使用(Capturecap=newCapture()){cap.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT,高度);cap.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH,宽度);temp=cap.QueryFrame().Copy();}}返回温度;}多次调用该函数首先显示捕获帧需要相当长的时间,锁定程序几秒钟。然后,在使用VisualC#2010调试运行程序时捕获几帧后,vshost.exe弹出一个Windows错误:FaultingapplicationDashboardGUI.vshost.exe,版本10.0.30319.1,时间戳0x4ba2084b,错误模块MSVCR90.dll,版本9.0.30729.6161,时间戳0x4dace5b9,异常代码0xc0000005,故障偏移量0x00024682,进程ID0xe78,应用程序启动时间0x01cc792086025f01。然后我继续发布应用程序并从可执行文件运行它:DrabolicGUI并得到错误:DrabolicAppGUI。版本:v4.0.30319描述:进程因未处理的异常而终止。异常信息:System.TypeInitializationException堆栈:在Emgu.CV.CvInvoke.cvReleaseCapture(IntPtrByRef)在Emgu.CV.Capture.DisposeObject()处。Util.DisposableObject.Finalize()但我也让它抛出与Emgu.CV.CvInvoke.cvCreateCameraCapture(Int32)相同的异常。是什么导致了这些问题?他们如何避免呢?有什么方法可以比当前更快地捕获帧(当它没有崩溃时)?我查看了您的代码,发现了问题所在。我崩溃的原因是因为我建议的使用声明抱歉:s。这不完全是一个using语句。看来您正在频繁访问代码以进行系统处理。Capturecap=newCapture()用很少的代码做很多事情。它不仅与你的相机建立通信,而且检查它的存在,处理驱动程序并创建环形缓冲区等。现在,虽然给出的代码确保只返回更新的图像,但它通常只有在使用按钮或有一些延迟的计时器。既然我知道您要实现的目标,并且由于您想要图像的频率高于使用此方法合理实现的图像,您就有了一个更实用的选择。全局设置Capture设备,设置为记录,如果可能的话调用ProcessFrame从buffer中获取图像。现在更改您的QueryFrame以复制它刚刚获得的任何框架。这有望解决您获取前一帧的问题,现在您将在缓冲区中拥有最新的帧。私人捕获帽;图像框;公共CameraCapture(){InitializeComponent();cap=新捕获();cap.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT,高度);CAP_PROP.CV_CAP_PROP_FRAME_WIDTH,宽度);Application.Idle+=ProcessFrame;}privatevoidProcessFrame(objectsender,EventArgsarg){frame=_capture.QueryFrame();grayFrame=frame.Convert();}publicreturnImageQueryFrame()frame.Copy();希望这次能帮助你找到解决方案,抱歉其他方法没有用,干杯Chrishttp://www.emgu.com/wiki/index.php/Setting_up_EMGU_C_Sharp–当我遇到同样的问题时,这个真的很有帮助,可能值得一看。以上就是C#学习教程:在C#中使用Emgu.CV的System.TypeInitializationException,分享全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
