2012-12-14 49 views
6

Tôi đang cố bắt đầu sử dụng CV CV emgu CV mở cho C#. Nhưng tôi đang gặp rắc rối khi nó hoạt động. Tôi đang theo hướng dẫn này để thực hiện chương trình đơn giản sử dụng emgu CV Link nhưng tôi nhận được lỗi sau: (bất kỳ ý tưởng những gì tôi đang làm sai?)Không thể tải DLL 'opencv_core242': Không tìm thấy mô-đun được chỉ định. Emgu CV

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

Mã của bạn là gì? Bạn đã thử cái gì? Được spesific. –

+0

:(Không biết để đăng lõi trong cách dễ đọc ... Nhưng nó đã được tải hình ảnh mã đơn giản từ tập tin và chuyển đổi nó sang định dạng khác trên một nút bấm. – Laci

+0

có thể trùng lặp của [Emgu.CV.CvInvoke ném một ngoại lệ] (http://stackoverflow.com/questions/12509582/emgu-cv-cvinvoke-threw-an-exception) –

Trả lời

8

Vì Emgu.CV chỉ là một trình bao bọc .NET (xem http://en.wikipedia.org/wiki/Wrapper_library), bạn cần đặt các tệp .DLL gốc của OpenCV vào thư mục đầu ra ứng dụng của bạn.

Bạn có thể tìm thấy các tập tin cần thiết bằng cách tải về phiên bản tương ứng của OpenCV tại http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.2/OpenCV-2.4.2.exe/download

+0

Tôi đã đặt hai dll được đề cập trong liên kết trong thư mục đầu ra của ứng dụng của tôi – Laci

+3

Laci, khi một .DLL cũng yêu cầu khác. DLL, bạn sẽ không nhìn thấy một .DLL khác trong thông báo lỗi.Ví dụ, 1.dll yêu cầu 2.dll và C# wrapper của bạn sử dụng 1.dll.Thông báo lỗi sẽ cho thấy rằng 1.dll không được tìm thấy, kể từ 1. dll không thể tải được . Vì vậy, tôi khuyên bạn nên thêm tất cả các tệp .DLL của OpenCV mà bạn nghĩ rằng Emgu sử dụng và, khi ứng dụng của bạn biên dịch, hãy thử xóa các tệp không được sử dụng cho đến khi bạn chỉ yêu cầu tệp. Chúc may mắn. –

+0

Điều đó đã giúp cảm ơn bạn Dídac. – Laci

0

Đúng như các tiểu bang lỗi - nó không thể tìm thấy DLL gốc trong thư mục làm việc của applcation của bạn. Đảm bảo thư viện opencv_core242.dll được sao chép vào thư mục đầu ra và thư mục làm việc của ứng dụng của bạn.

+0

Yea nhưng vấn đề là tôi có các tệp DLL ở đó .. – Laci

+0

Bạn có chắc chắn nó nằm trong thư mục WORKING không? xác minh điều này với "Environment.WorkingDirectory" Kiểm tra đường dẫn và kiểm tra xem DLL có tồn tại dọc theo đường dẫn đó không –

1

Bạn có thể giải quyết vấn đề này bằng cách sử dụng Dependency Walker ->http://www.dependencywalker.com/ vào "opencv_core242.dll" để tìm bất kỳ DLL mất tích.

Đối với tôi, Nó cho thấy rằng tôi không có tbb.dll như Chủ đề ở đây tbb.dll not found

Chỉ cần tải về từ https://www.threadingbuildingblocks.org/ và sao chép TBB * .dll vào thư mục hoặc "System32" làm việc nó sẽ ổn thôi

1

Cũ, nhưng tôi đã có cùng một vấn đề. Hóa ra rằng 2.4.0 có tích hợp GPU và nếu bạn không có thẻ Nvidia, nvcuda.dll bị thiếu và opencv_core242.dll không tải được. Cố gắng tất cả mọi thứ, giải pháp duy nhất là quay trở lại 2.3.0 và mọi thứ hoạt động tốt.

0

Tải xuống trình phụ thuộc tập đi từ http://www.dependencywalker.com/ và mở xác nhận quyền sở hữu .dll để không tải. Sau đó, tìm các phụ thuộc, nếu một hoặc nhiều bị thiếu trong thư mục của ứng dụng ngay cả thư mục hệ thống của bạn (system32 hoặc syswow64) thì chúng cần phải ở trong đó.

3

Tôi sẽ giúp bạn tiết kiệm rất nhiều thời gian. cho EMGU CV phiên bản 2.4. * Dll bị thiếu là "nvcuda.dll" không phải là một phần của Binaries của EMGU nhưng thường nằm trong thư mục system32 (có thể bạn cần cài đặt trình điều khiển nvidia, nếu không chỉ tìm dll trực tuyến)

+1

chính xác trong trường hợp của tôi. Chỉ cần tải về nvcuda.dll từ http://sourceforge.net/projects/emguexample/files/ sau đó folow các hướng dẫn và sao chép nvcuda.dll vào thư mục làm việc của bạn (trong trường hợp của tôi là thư mục Debug - Tôi đang sử dụng Emgu CV với Visual Studio 2012). –

Các vấn đề liên quan