2012-12-14 18 views
6

मैं सी # के लिए इमू सीवी ओपन सीवी का उपयोग शुरू करने की कोशिश कर रहा हूं। लेकिन मुझे इसे काम करने में परेशानी हो रही है। मैं emgu सीवी Link का उपयोग कर साधारण प्रोग्राम बनाने के लिए इस गाइड अनुसरण कर रहा हूँ, लेकिन मैं निम्नलिखित त्रुटि मिलती है: (किसी भी विचार क्या मैं गलत कर रहा हूँ?)DLL 'opencv_core242' लोड करने में असमर्थ: निर्दिष्ट मॉड्यूल नहीं मिला। इमू सीवी

System.TypeInitializationException was unhandled 
     Message=The type initializer for 'Emgu.CV.CvInvoke' threw an exception. 
     Source=Emgu.CV 
     TypeName=Emgu.CV.CvInvoke 
     StackTrace: 
     at Emgu.CV.Image`2..ctor(String fileName) in c:\Emgu\emgucv-windows-x86-gpu 2.4.2.1777\Emgu.CV\Image.cs:line 144 
     at TEST.Form1.button1_Click(Object sender, EventArgs e) in c:\documents and settings\laci\my documents\visual studio 2010\Projects\TEST\TEST\Form1.cs:line 28 
     at System.Windows.Forms.Control.OnClick(EventArgs e) 
     at System.Windows.Forms.Button.OnClick(EventArgs e) 
     at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 
     at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 
     at System.Windows.Forms.Control.WndProc(Message& m) 
     at System.Windows.Forms.ButtonBase.WndProc(Message& m) 
     at System.Windows.Forms.Button.WndProc(Message& m) 
     at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
     at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
     at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
     at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 
     at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 
     at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 
     at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 
     at System.Windows.Forms.Application.Run(Form mainForm) 
     at TEST.Program.Main() in c:\documents and settings\laci\my documents\visual studio 2010\Projects\TEST\TEST\Program.cs:line 18 
     at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
     at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
     at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ThreadHelper.ThreadStart() 
    InnerException: System.DllNotFoundException 
     Message=Unable to load DLL 'opencv_core242': The specified module could not be found. (Exception from HRESULT: 0x8007007E) 
     Source=Emgu.CV 
     TypeName="" 
     StackTrace: 
      at Emgu.CV.CvInvoke.cvRedirectError(CvErrorCallback errorHandler, IntPtr userdata, IntPtr prevUserdata) 
      at Emgu.CV.CvInvoke..cctor() in c:\Emgu\emgucv-windows-x86-gpu 2.4.2.1777\Emgu.CV\PInvoke\CvInvoke.cs:line 166 
     InnerException: 
+1

आपका कोड क्या है? आपने क्या प्रयास किया है Spesific हो। –

+0

:(कोर को पठनीय तरीके से पोस्ट करने के बारे में नहीं पता ... लेकिन यह फ़ाइल से सरल कोड लोड छवि थी और इसे बटन क्लिक पर किसी अन्य प्रारूप में परिवर्तित कर दिया गया। – Laci

+0

[डुगु। सीवी.सीवीइवोक ने एक अपवाद फेंक दिया] (http://stackoverflow.com/questions/12509582/emgu-cv-cvinvoke-threw-an-exception) –

उत्तर

8

चूंकि Emgu.CV सिर्फ एक .NET wrapper है (http://en.wikipedia.org/wiki/Wrapper_library देखें), आपको अपनी एप्लिकेशन आउटपुट निर्देशिका में ओपनसीवी की देशी डीएलएल फाइलों को रखना होगा। किसी भी लापता DLLs खोजने के लिए "opencv_core242.dll" पर>http://www.dependencywalker.com/ -

आप आप निर्भरता वाकर का उपयोग करके इस समस्या का समाधान हो सकता है http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.2/OpenCV-2.4.2.exe/download

+0

मैंने अपनी एप्लिकेशन आउटपुट निर्देशिका में लिंक में उल्लिखित दो डीएलएस डाले हैं। – Laci

+3

लासी, जब एक डीएलएल को भी एक और की आवश्यकता होती है। डीएलएल, आप त्रुटि संदेश में एक और डीएलएल नहीं देखेंगे। उदाहरण के लिए, 1. डीएल को 2. डीएल की आवश्यकता है और आपका सी # रैपर 1. डीएल का उपयोग करता है। त्रुटि संदेश दिखाएगा कि 1. डीएल 1 से नहीं मिला है। डीएल लोड नहीं किया जा सकता है । इस प्रकार, मैं आपको ओपनसीवी की सभी डीएलएल फाइलों को जोड़ने की सलाह देता हूं जो आपको लगता है कि एम्गु का उपयोग होता है और, जब आपका ऐप संकलित हो जाता है, तब तक गैर-उपयोग की गई फ़ाइलों को हटाने का प्रयास करें जब तक कि आपको केवल फाइलों की आवश्यकता न हो। सौभाग्य। –

+0

इससे आपको डियाडैक का धन्यवाद करने में मदद मिली। – Laci

0
वास्तव में त्रुटि राज्यों के रूप में

- यह नहीं मिल सकता है अपने applcation की कामकाजी निर्देशिका में देशी डीएलएल। सुनिश्चित करें कि opencv_core242.dll लाइब्रेरी को आउटपुट निर्देशिका और आपके एप्लिकेशन की कार्यशील निर्देशिका में कॉपी किया गया है।

+0

हाँ, लेकिन समस्या यह है कि मेरे पास डीएलएल है .. – Laci

+0

क्या आप वाकई कामकाजी निर्देशिका में हैं? आप कर सकते हैं इसे "Environment.WorkingDirectory" के साथ सत्यापित करें। पथ की जांच करें और यह देखने के लिए जांचें कि क्या डीएलएल उस पथ के साथ मौजूद है। –

1

पर OpenCV की इसी संस्करण को डाउनलोड करके आवश्यक फ़ाइलें पा सकते हैं।

मेरे लिए, यह दिखाने के .dll निर्देशिका या "System32" काम करने के लिए है कि मैं tbb.dll यहाँ थ्रेड tbb.dll not found

बस https://www.threadingbuildingblocks.org/ से डाउनलोड करने और TBB कॉपी के रूप में है नहीं था * यह ठीक हो जाएगा

1

पुराना एक, लेकिन मुझे एक ही समस्या थी। यह पता चला है कि 2.4.0 में GPU एकीकरण है और यदि आपके पास Nvidia कार्ड नहीं है, तो nvcuda.dll गुम है और opencv_core242.dll लोड करने में विफल रहता है। सब कुछ करने का प्रयास किया, एकमात्र समाधान 2.3.0 पर वापस जाना था और सबकुछ ठीक काम करता था।

0

http://www.dependencywalker.com/ से निर्भरता वॉकर डाउनलोड करें और लोड करने का दावा करने वाले डीएलएल को खोलें। फिर निर्भरताओं की तलाश करें, यदि आपके सिस्टम फ़ोल्डर (system32 या syswow64) के ऐप की निर्देशिका से एक या अधिक गायब हैं तो उन्हें वहां होने की आवश्यकता है।

3

मैं आपको बहुत समय बचाऊंगा। ईएमजीई सीवी संस्करण 2.4 के लिए। * गायब डीएल "nvcuda.dll" है जो ईएमजीई के द्विआधारी का हिस्सा नहीं है लेकिन यह आमतौर पर system32 फ़ोल्डर में स्थित है (शायद आपको nvidia ड्राइवर स्थापित होना चाहिए, अगर सिर्फ डीएल की तलाश न हो ऑनलाइन)

+1

बिल्कुल मेरे मामले में। बस http://sourceforge.net/projects/emguexample/files/ से nvcuda.dll डाउनलोड करें और फिर निर्देशों को फॉलो करें और अपनी कार्य निर्देशिका में nvcuda.dll कॉपी करें (मेरे मामले में डीबग फ़ोल्डर है - मैं दृश्य के साथ इमू सीवी का उपयोग कर रहा हूं स्टूडियो 2012)। –

संबंधित मुद्दे