2017-10-03 4 views
0

Ich bekomme immer OpenCV: u != 0 Fehler beim Versuch, einige Fotos zu vergleichen. Meine Methode sieht so aus. Die ImageFile-Klasse hat einige Variablen. Es tut dies, auch wenn ich versuche, ein Foto zu vergleichen. Stacktrace Wesen:C# EmguCV Fehler "OpenCV: u! = 0"

Unbehandelte Ausnahme: Emgu.CV.Util.CvException: OpenCV: u = 0

bei Emgu.CV.CvInvoke.CvErrorHandler (Int32 Status, IntPtr funcName, IntPtr errMsg, IntPtr filename , Int32 Linie, IntPtr Userdata)

bei Emgu.CV.Features2D.Feature2DInvoke.CvFeature2DDetectAndCompute (IntPtr feature2D, IntPtr Bild, IntPtr Maske, IntPtr keypoints, IntPtr Deskriptoren, Boolean useProvidedKeyPoints)

bei Emgu.CV.Features2D .Feature2D.DetectAndCompute (IInputArray-Bild, I InputArray Maske, VectorOfKeyPoint keypoints, IOutputArray Deskriptoren, Boolean useProvidedKeyPoints)

public async Task<List<ImageFile>> BeginSearchAsync() 
{ 
    var foundImageFiles = new List<ImageFile>(); 
    Mat img = CvInvoke.Imread(_imageFileToBeSearched.FileInfo.FullName, ImreadModes.AnyColor); 

    var thredi = new Thread(() => 
    { 
     foreach (var imageFile in _listOfSearchableImageFiles) 
     { 
      try 
      { 
       using (var tempImage = CvInvoke.Imread(imageFile.FileInfo.FullName, ImreadModes.AnyColor)) 
       { 
        var result = DrawMatches.Draw(tempImage, img, out long matchTime, out long score); 
        var window = new ResultWindow(result, score); 
        window.ShowDialog(); 
       } 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine($"Error during matching file {imageFile.Name}"); 
       Console.WriteLine(ex.Message); 
      } 
     } 
    }); 

    thredi.SetApartmentState(ApartmentState.STA); 
    thredi.Start(); 
    return foundImageFiles; 
} 

Antwort

0

Diese Ausnahme scheint, dass App, um anzuzeigen, zu viel Speicher nehmen. In meinem Fall schien mir die Qualität der Bilder einfach zu gut zu sein. Sie auf die Hälfte zu reduzieren, behob das Problem.