EmguCV 64-bits build runtime-fout

Ik kom problemen tegen met het bouwen van een bestaande 32-bits EmguCV ( versie 2.3 ) in 64-bits met .net 4.0 en VS2010 op een W7/x64-besturingssysteem. Ik heb een commerciële licentie gekocht, als dat ertoe doet en wordt gedownload van de links op de bon.

De fout is

System.TypeInitializationException was unhandled
 Message=The type initializer for 'Emgu.CV.CvInvoke' threw an exception.
 Source=Emgu.CV
 TypeName=Emgu.CV.CvInvoke

Ik volgde de instructies in dit artikel . In feite heb ik de voorbeeldprojecten in het artikel gebruikt en ze bouwen prima met V2.2, maar als ik deze door V2.3-binaire bestanden (zowel emgu als opencv) vervang, kom je de fout tegen.

Heeft iemand met succes een Emgu ( Version 2.3.x ) x64-project gebouwd? Geef enkele richtlijnen.

2
en Ja, ik heb de juiste binaries van opencv toegevoegd aan mijn map voor foutopsporing. Dus het kan geen eenvoudige ontbrekende dll-fout zijn.
toegevoegd de auteur Mikos, de bron
@Chris, bedankt. Ik volgde je instructies letterlijk op - het was inderdaad heel nuttig. Met vriendelijke groeten waardeer uw hulp en steun.
toegevoegd de auteur Mikos, de bron
"omzetting van afbeelding naar afbeelding wordt niet ondersteund door OpenCV"
toegevoegd de auteur Mikos, de bron
De fout I is de TypeInitializationException, gevolgd door de bovenstaande convertion (sic) fout. Ik weet niet zeker wat het probleem is. Bedankt voor je hulp.
toegevoegd de auteur Mikos, de bron
Is er een voorbeeldproject dat u kunt delen met emgu 2.3 (x64) dat u kunt delen?
toegevoegd de auteur Mikos, de bron
De codebase is hier beschikbaar: yousendit.com/download/T2dmNnFJYXk1R05WeHNUQw
toegevoegd de auteur Mikos, de bron
toegevoegd de auteur Mikos, de bron
Hallo Mikos, ik vond het best grappig om te ontdekken dat het artikel een artikel was dat ik schreef. Ik zal het probleem nu onderzoeken en contact met u opnemen. Proost
toegevoegd de auteur Chris, de bron
Hallo, goed, ik heb de projecten gecompileerd met EMGU 2.3.0 x64 en alles werkt goed. De fout die u noemt, kan te wijten zijn aan het niet richten op het juiste platform. Geeft de InnerException de volgende informatie: {"Er is geprobeerd een programma met een onjuist formaat te laden. (Uitzondering op HRESULT: 0x8007000B)"} Zo ja, dan is dit het probleem. Zo niet, post het dan zodat ik het kan proberen en het probleem opnieuw kan creëren. Proost
toegevoegd de auteur Chris, de bron
Ok, het is dus wanneer u tussen beeldtypen converteert. Kans is dat je probeert meer dan één gegevenstype tegelijkertijd te converteren EMGU vindt dit om de een of andere reden niet leuk. Dus als ik van naar wilde converteren, zou ik de volgende afbeelding moeten doen My_double_image = my_BGR_BYTE_Image.Convert (). Converteren (); Ik heb een soortgelijke fout kunnen reproduceren door te converteren naar een en vervolgens naar een , dus ik moet nu de beelddiepte converteren voor het gegevenstype. Als dit niet helpt, plaats dan de code die de fout oplevert Cheers
toegevoegd de auteur Chris, de bron
Ik zal de nieuwe 2.3.0-versies uploaden naar codeprojecten zodra ik de kans krijg op mijn werk
toegevoegd de auteur Chris, de bron

3 antwoord

De oorzaak van deze fout (mocht iemand anders tegen hetzelfde probleem aanlopen) is dat het programma geen toegang kan krijgen tot opencv_imgproc231.dll of opencv_core231.dll, hoewel deze aanwezig zijn in de uitvoer "bin" -directory.

Er zijn twee oplossingen:

  1. Voeg ze toe aan het project en stel hun eigenschappen in op altijd kopiëren omdat ze EMGU's twee sleutelbestanden zijn.

  2. Als stap 1 niet werkt, vervangt u de huidige sleutelbestanden in de bin-map door nieuwe exemplaren.

Als beide methoden mislukken, is er mogelijk een probleem met de build, dus download een nieuwe kopie van EMGU van Sourceforge en probeer het opnieuw. De fout zal later worden opgenomen in een technisch artikel om een ​​duidelijkere uitleg te geven over hoe het op te lossen.

cheers, Chris

4
toegevoegd
Hallo Chris. Ik heb geprobeerd om die twee verwijzingen aan mijn project toe te voegen, maar op de een of andere manier mocht ik het niet toevoegen. Er staat Reference kan geen reden toevoegen omdat het niet toegankelijk is of het geen geldige assembly/COM-component is . Help alstublieft!
toegevoegd de auteur ykombinator, de bron
Bedankt, ik heb het uitgevoerd. :)
toegevoegd de auteur ykombinator, de bron
Hallo de genoemde bestanden zijn de niet-beheerde opencv-code, wat EMGU effectief verpakt, het zijn geen .NET-componenten en moeten worden toegevoegd aan de uitvoerdirectory of als bestaande bestanden binnen uw project. Zie mijn artikel op codeproject en het zal je er doorheen leiden codeproject.com/KB/cs/ EMGU_Image_Processing.aspx Proost
toegevoegd de auteur Chris, de bron

Het is niet nodig om ze aan het project toe te voegen; VS zal je niet toestaan. Open eenvoudig FaceRecognizer.cs op openbare statische deelklasse CvInvoke en wijzig:

[DllImport(CvInvoke.EXTERN_LIBRARY, CallingConvention = CvInvoke.CvCallingConvention)] 

naar:

[DllImport(Emgu.CV.CvInvoke.EXTERN_LIBRARY, CallingConvention = Emgu.CV.CvInvoke.CvCallingConvention)] 

Zorg ervoor dat je ze allemaal wijzigt.

1
toegevoegd
VS laat je niet?
toegevoegd de auteur Austin Henley, de bron

Test eerst deze manier: open een voorbeeldproject uit de map emgu cv installaiton en voer het uit. bijvoorbeeld, open hello world-voorbeeld en probeer het uit te voeren. als voorbeeldprojecten zonder problemen worden uitgevoerd, is de installatie correct.

Voor emgu cv-voorbeeldprojecten is de waarde van de uitvoerpad -optie in de Build -instellingen van het -project ingesteld op '.. \ .. \ bin' . Als u uw projectprobleem wilt oplossen, opent u het project in de visuele studio en stelt u de waarde in van de uitvoerpad -optie in 'C: \ Emgu \ emgucv 2.9 \ bin' . Probeer het project uit te voeren. Het moet met succes lopen.

Now, set back the value of Output Path option to bin\Debug\. Then, add all DLL files in the 'C:\Emgu\emgucv 2.9\bin' folder to your project using ADD -> Existing Item menu. similarly, add all DLL files in the 'C:\Emgu\emgucv 2.9\bin\x64' folder to your project using ADD -> Existing Item menu. Now, go to properties window and set Copy to Output Directory option of all dll files to Copy Always. Finally, in the Configuration Manager window, create a new configuration for x64 platform.

Succes

0
toegevoegd