2017-05-19 6 views
0

Verwendung der neuesten v2 von OpenCVSharp (2.4.10.201 ...), die ich in meinem Projekt mit dem NuGet-Manager installiert habe.OpenCVSharp 2: FloodFill ist kaputt und korrumpiert Ausgabemaske

Es scheint, dass die Floodfill-Funktion ein Speicher-Korruptions-Problem hat. Ich bin es auf das folgende Bild Anwendung: enter image description here

und hier ist das Ergebnis: enter image description here

während die erzeugte Maske die gleiche Korruption Muster folgt: enter image description here

Der Code, den ich verwenden ist:

filledArea = new CvMat(hue.Rows + 2, hue.Cols + 2, MatrixType.U8C1); 
Cv.FloodFill(hue, hintPos, new CvScalar(255,255,255), low, upp, out filledAreaData, 
    FloodFillFlag.Link8 | FloodFillFlag.FixedRange, filledArea); 

wo hue ist das Eingangsbild

hintPos ist CvPoint (10.400)

low = upp = CvScalar (10,10,10,10)

Hinweis: Das "Korruptionsmuster" ist zufällig und ändert sich jedes Mal.

Antwort

0

Es war ein Problem, die Maske nicht mit Nullwerten zu initialisieren. Es sieht wie folgt aus:

filledArea = new CvMat(hue.Rows + 2, hue.Cols + 2, MatrixType.U8C1); 

nicht den reservierten Speicher auf einen beliebigen Wert initialisieren, so erhalten Sie „beschädigt“ Pixel.

filledArea = new CvMat(hue.Rows + 2, hue.Cols + 2, MatrixType.U8C1, new CvScalar(0,0,0,0)); 

Erstellt eine Maske mit 0 Pixel.

Meine falsch, ich dachte, es in C# nicht möglich war, zunächst bis zu einem gewissen Wert zu initialisieren, ohne dass neue Speicher zu greifen wie bei Array [] und Liste ist ...

+0

OpenCvSharp OpenCV wickelt, die geschrieben wird in C++ und C. OpenCvSharp 'Mat' verwendet meist nicht verwalteten Speicher. –

+0

@LeonidVasilyev Ja, aber das ist nicht Mat, die ich verwendet habe. Es ist die C# äquivalente CvMat ..? –

+1

'CvMat' und' Mat' sind in OpenCV und dem verwalteten Wrapper OpenCvSharp ähnlich. Überprüfen Sie [Unterschied zwischen cvMat, Mat und IpImage] (http://stackoverflow.com/questions/11037798/difference-between-cvmat-mat-and-ipimage), [Mat versus CvMat] (https://github.com/ shimat/opencvsharp/issues/95) Diskussionen und 'Mat' OpenCvSharp [Quellcode] (https://github.com/shimat/opencvsharp/blob/bfaf35f385fd5eda49792dfd19db27bcef079f9f/src/OpenCvSharp/modules/core/Mat/Mat.cs#L47) (Beachten Sie die Klassennutzung von NativeMethods). –