Laden...

OpenCV: Unrecognized or unsupported array type

Erstellt von Stauch30 vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.836 Views
S
Stauch30 Themenstarter:in
15 Beiträge seit 2017
vor 6 Jahren
OpenCV: Unrecognized or unsupported array type

Hallo zusammen,

Ich hab mit Hilfe der ShapeDetection aus der EmguCV ein Programm zur Formenerkennung erstellt. Das klappt alles soweit ganz gut. Jetzt hab ich dieses Programm in ein anderes integriert, das die gleichen EmguCV-Verweise bereits hinzugefügt hat und auch alle "using"-Direktive sind identisch.

Das hat alles wunderbar geklappt ohne Fehlermeldungen und nach einigen Testläufen kam folgende Fehlermeldung:

Emgu.CV.Util.CvException: "OpenCV: Unrecognized or unsupported array type"

Genau geht es dabei, wie im Bild im Anhang zu sehen ist, um den CircleF-Arraytyp.
Wieso kommt diese Fehlermeldung erst nach einigen Versuchen und davor funktioniert alles ohne Probleme?

Hoffentlich steh ich hier nur auf dem Schlauf und muss das nicht alles neu machen....

Vielen Dank schon mal im Voraus!
Mit freundlichen Grüßen

S
248 Beiträge seit 2008
vor 6 Jahren

Hallo Stauch30,

ich denke nicht, dass es am CircleF Array liegt, da dieses im Wrapper manuell erzeugt wird. Die Fehlermeldung kommt vom Methodenaufruf selber.
Kannst du prüfen, ob dein Input-Image immer 8-bit, single channel ist.

Grüße
spooky

S
Stauch30 Themenstarter:in
15 Beiträge seit 2017
vor 6 Jahren

Vielen Dank für die schnelle Antwort!

Mit folgender Methode wird das image aufgerufen, das später verwendet wird. ich seh darin keinen Unterschied zu dem image-Aufruf des alten Programms, aber hier funktioniert es nicht mehr....


 public UMat loadImage()
        {
            
            UMat uimage = new UMat();

            if (fileNameTextBox.Text != String.Empty)
            {
                StringBuilder msgBuilder = new StringBuilder("Performance: ");

                //Load the image from file and resize it for display
                Image<Bgr, byte> img =
                   new Image<Bgr, byte>(fileNameTextBox.Text)
                   .Resize(500, 500, Emgu.CV.CvEnum.Inter.Linear, true);

                CvInvoke.CvtColor(img, uimage, ColorConversion.Bgr2Gray);

                //use image pyr to remove noise
                UMat pyrDown = new UMat();
                CvInvoke.PyrDown(uimage, pyrDown);
                CvInvoke.PyrUp(pyrDown, uimage);

                Image<Gray, Byte> gray = img.Convert<Gray, Byte>().PyrDown().PyrUp();
                originalImageBox.Image = img;
                return uimage;

            }
            return uimage;

        }

5.657 Beiträge seit 2006
vor 6 Jahren

Hi Stauch30,

ich seh darin keinen Unterschied zu dem image-Aufruf des alten Programms

Wir kennen ja dein altes Programm nicht, wir wissen nur, daß es so nicht funktioniert. Aber die Fehlermeldung ist ja relativ eindeutig. Da müßtest du mal in die OpenCV-Doku schauen, welcher Typ als Parameter erwartet wird.

Weeks of programming can save you hours of planning

S
Stauch30 Themenstarter:in
15 Beiträge seit 2017
vor 6 Jahren

Das Inputimage muss immer 8-bit, single channel sein.

Wie kann ich das überprüfen bzw. sicherstellen?

5.657 Beiträge seit 2006
vor 6 Jahren

Indem du das PixelFormat des Bitmaps überprüfst (Format8bppIndexed), und gegebenenfalls konvertierst.

Weeks of programming can save you hours of planning

S
Stauch30 Themenstarter:in
15 Beiträge seit 2017
vor 6 Jahren

Vielen Dank für die hilfreichen Tipps.

Funktioniert wieder.

Das Problem lag bei der Initalisierung der UMat uimage außerhalb der if-Schleife.