web-dev-qa-db-fra.com

L'initialiseur de type pour 'Emgu.CV.CvInvoke' a levé une exception

Je reçois cette erreur

L'initialiseur de type pour 'Emgu.CV.CvInvoke' a généré une exception.

quand j'essaie d'utiliser Emgu CV. J'ai essayé tout ce que je pouvais imaginer pour y remédier mais cela donne toujours la même erreur, et lorsque je clique sur un bouton,

La référence d'objet n'est pas définie à une instance d'un objet.

C'est le code que j'essaye:

void ProcessFunction(object sender, EventArgs e)
{
    imgOrg = capturecam.QueryFrame();
    if (imgOrg == null) return;
    imgProc = imgOrg.InRange(new Bgr(50, 50, 50), new Bgr(255, 255, 255));
    imgProc = imgProc.SmoothGaussian(9);
    imageBox1.Image = imgOrg;
    imageBox2.Image = imgProc;
}

Qu'est-ce que j'aurais pu faire de mal et comment puis-je résoudre ce problème? Merci!

14
Dilshan Zuhdi

J'ai eu le même problème. Mon exception interne était "Impossible de charger DLL 'opencv_core290'". 

Vous devez copier les dossiers x86 et x64 de "yourEmguFolder/bin" dans le répertoire de sortie de votre projet (bin). Ensuite, reconstruisez le projet et exécutez-le.

Selon emgu wiki

14

Il est probablement impossible de charger les dépendances non gérées DLL. Quelques suggestions 

  1. Assurez-vous que votre projet .NET cible x86 plutôt que AnyCPU, car vous avez probablement la version x86 d'OpenCV.
  2. Assurez-vous que les dll OpenCV se trouvent dans votre PATH (ou directement dans le répertoire bin, s’il s’agit d’une application Console/WinForms/WPF.)
9
jlew

Copiez et collez toutes les dll non gérées dans le dossier bin de votre installation EMGU là où se trouve votre fichier exe (dossier Release ou Debug de votre dossier de projet). 
Dans mon cas, les dll non gérées sont à "C:\Emgu\emgucv-windows-universal-cuda 2.9.0.1922\bin\x86"

5
Subodha Charles

Vous devez d’abord ajouter trois bibliothèques à votre projet . Opencv_core290.dll, opencv_highgui290.dll, opencv_imgproc290.dll. Ici, 290 fait référence à votre version ouverte. Après ce changement dans leur propriété "Ne pas copier" à "Copier toujours". que sauvegarder votre projet. Après cela, allez à l'emplacement suivant. Si votre machine est en 64 bits, rendez-vous au dossier suivant "C:\Emgu\emgucv-windows-universal-cuda 2.9.0.1922\bin\x64" ou si vous utilisez un système d'exploitation 32 bits, allez à "C:\Emgu\emgucv- windows-universal-cuda 2.9.0.1922\bin\x86 "et copiez toutes les dll de ce dossier et collez-les dans votre dossier Votre projet/bin/debug /. que de reconstruire votre projet. Cela fonctionnera bien.

Bonne chance!!!!

2
Mohamed Masrooj

vous devez ajouter une dépendance à la DLL dans le projet et modifier ' copier dans le répertoire de sortie ' propriété en 'toujours copier' (ajouter -> élément existant) de Emgu\emgucv-windows-universal-cuda\x86

dans mon projet, ajoutez: opencv_core290.dll, opencv_highgui290.dll, opencv_ffmpeg290.dll, opencv_imageproc290.dll et cudart32_55.dll  

2
keyvan moazami

J'ai eu le même problème dans ma machine 32 bits pendant 3 jours. J'ai résolu ce problème en copiant simplement toutes les dll dans le dossier system32 des dossiers bin et x86 et cela a fonctionné. On dirait qu'il existe des dll qui dépendent d'autres dll et du moment où vous transférez tout cela fonctionne. Je n'ai pas eu le temps de savoir lequel.

1
Mannu

Trouvé ceci sur c #, VS 2017, version emgu 3.2.0.2682

Essayé une construction simple sur AnyCPU et a reçu l'exception de format incorrect . J'ai donc essayé exception de format incorrect x86 en raison de suggestions possibles dans les commentaires. Enfin, je l'ai mis en x64 et cela a bien fonctionné.

1
mark deacon

Pour moi, le problème a été résolu en cliquant dans Visual Studio:

Menu -> Projet -> Propriétés -> Construire -> Préférer 32 bits. 

Ce devait être un problème avec emgu (probablement x86) et mon système d'exploitation x64).

0
tamsiv

vous pouvez utiliser LD_LIBRARY_PATH pour le résoudre:

  1. ouvrez l'avertissement et vérifiez ce qui manque à votre programme

  2. localiser le chemin

    $ local # pour trouver le chemin de la bibliothèque

  3. Dans votre IDE, définissez la variable d'environnement LD_LIBRARY_PATH sur le chemin de la bibliothèque, (j'utilise monodevelop, le chemin est Exécuter -> Exécuter avec -> Paramètres personnalisés ...)

ça marche bien maintenant :)

0
Jackey Huo

Si cela ne fonctionne pas sur Windows Server, vous devez activer UI Desktop Experience.

vous pouvez voir le post

0
Hello World