Monday 5 June 2017

Opencv Flood Fill Binär Optionen


Diese Frage hat hier schon eine Antwort: Ich habe eine Kantenkarte aus dem Kantenerfassungsmodul in OpenCV (Canny Edge Detection) extrahiert. Was ich tun möchte, ist, die Löcher in der Randkarte zu füllen. Ich benutze C. Und OpenCV Bibliotheken. In OpenCV gibt es eine cvFloodFill () - Funktion, und es füllt die Löcher mit einem Samen (mit einem der Ort, um Überschwemmungen zu starten). Allerdings versuche ich, alle Innenlöcher zu füllen, ohne die Samen zu kennen (ähnlich wie imfill () in MATLAB) Q1: wie man alle Samen findet, damit ich cvFloodFill () Q2 anwenden kann: wie man ein imfill ( ) Äquivalent Newbie in OpenCV, und jeder Hinweis wird geschätzt. Gefragt am 11. November 09 um 16:19 Uhr Amro 105k 9679 19 9679 171 9679 313 als Duplikat von Shai matlab markiert Benutzer mit dem Matlab-Abzeichen können die matlab Fragen als Duplikate einzeln schließen und nach Bedarf wieder öffnen. Jun 5 14 at 8:52 Diese Frage wurde schon vorher gestellt und hat bereits eine Antwort. Wenn diese Antworten Ihre Frage nicht vollständig ansprechen, bitte eine neue Frage stellen. Entsprechend der Dokumentation von imfill in MATLAB: Um also die Löcher Pixel zu erhalten, rufen Sie cvFloodFill mit dem linken Eckpixel des Bildes als Samen auf. Sie erhalten die Löcher, indem sie das im vorherigen Schritt erhaltene Bild ergänzen. MATLAB Beispiel: beantwortet Nov 11 09 um 18:02 Amro 105k 9679 19 9679 171 9679 313 that39s awesome, Amro Danke. Ndash Lily Nov 11 09 um 20:17 Sehr schön. Ich habe versucht, herauszufinden, wie dies zu tun, ohne sich auf die Löcher Flagge in imfill. Ich mache das gerne auf OpenCV Python und du hast mir den Weg gezeigt. Danke Amro ndash rayryeng Sep 3 14 at 16:49 Die Funktion cvDrawContours hat die Möglichkeit, die Konturen zu füllen, die du gezeichnet hast. Hier ist ein kurzes Beispiel cvDrawContours (IplImage, Konturen, Farbe, Farbe, -1, CVFILLED, 8) Hier ist die Dokumentation, die ich vermute, dass du das schon lange gepostet hast, aber ich hoffe es hilft jemandem. Dies ist der Quellcode (in C): Ive schaute um das Internet herum, um eine richtige Imfill-Funktion zu finden (wie die in Matlab), aber in C mit OpenCV arbeiten. Nach einigen Reastern kam ich endlich mit einer Lösung. Der Trick ist in der Parametrierung der Funktion cvDrawContours: cvDrawContours (dst, contour, weiß, weiß, 0, CVFILLED) dst Zielbild Kontur Zeiger auf die erste Kontur weiße Farbe verwendet, um die Kontur zu füllen 0 Maximaler Level für gezogene Konturen. Wenn 0, wird nur Kontur gezeichnet CVFILLED Dicke der Linien der Konturen gezeichnet werden mit. Wenn es negativ ist (z. B. CVFILLED), werden die Konturinnenräume gezeichnet. Mehr Infos in der openCV Dokumentation. Es gibt wahrscheinlich einen Weg, um dst direkt als binäres Bild zu bekommen, aber ich konnte nicht finden, wie man die cvDrawContours Funktion mit binären Werten benutzt. Antwortete Apr 15 13 um 12:54 Heres eine schnelle und schmutzige Ansatz: Führen Sie canny auf Ihrem Eingabebild, so dass das neue binäre Bild hat 1s an den Kanten, und 0s sonst Finden Sie die erste 0 an einer Seite des Randbildes und initiieren Eine Flutfüllung mit 1s an diesem Punkt auf einem leeren Bild mit deinem Randbild als Maske. (Hoffte hier, dass wir nicht unglücklich und samen diese erste füllen auf der Innenseite einer Form, die halb aus dem Bildschirm ist) Dieses neue floodfilled Bild ist der Hintergrund. Jedes Pixel, das hier eine 1 hat, ist der Hintergrund, und jedes Pixel, das eine 0 hat, steht im Vordergrund. Schleife durch das Bild und finde irgendwelche Vordergrundpixel. Samen Sie eine Flut auf irgendwelche finden Sie. ODER dieses neue überflutete Bild mit deinem Canny-Bild von Schritt 1, und du bist fertig. Antwortete Jan 26 10 bei 18: 41OpenCV Lektionen: 4. Arbeiten mit den Kanälen, die Schwellenverarbeitung, Flut füllen Lektionen auf Bildanalyse, OpenCV 4. Arbeiten mit den Kanälen, die Schwellenverarbeitung, Flut füllen. Beispiel: Billiard Balls Erkennung svi. nlwikiimgSeedAndThreshold02.png uralvision. blogspot perevalovdsgmail USU IMM Herbst 2010 Das Format des ABC 1. Funktionsname 2. Was es tut 3. Für was seine verwendet 4. Ankündigung und Beschreibung der Parameterliste 5. Beispiel D: - Arbeitscode cpp, der das Bild liest, welches die Verarbeitung verarbeitet und das Bild auf dem Bildschirm anzeigt oder in eine Datei mit der Funktion imwrite schreibt - Eingabebild (png oder jpg) - Das Ergebnis von (png oder jpg) Allgemeine Operationen über Bilder Gemeinsame Operationen auf Bildern Split - Partitionierung in Kanäle Merge - Verschmelzung von Kanälen Größe ändern - Größe ändern () cvtColor - konvertieren Farbräume () - Funktionen für Selbst-Studie inPractical Problem 1, siehe die Verteilung der Nachnamen in uralvision. blogspot split Und Merge - Beschreibung Funktion Split teilt das Mehrkanalbild in Kanäle. Funktion vereint Stiche zusammen ein Einzelbild-Mehrkanal. Am häufigsten werden sie für jede Farbbildverarbeitung, sowie für verschiedene Manipulationen der Kanäle separat verwendet. Split und Merge - eine Liste von Optionen Ankündigung und Beschreibung der Parameterliste: void split (Const Mat mtx, Vector mv) mtx - das ursprüngliche Farbbild mv - die Ergebnismenge ist 1-Kanal-Bild void Merge (Const vector mv, Mat Dst) mv - der ursprüngliche Satz von 1-Kanal-Bild dst - das resultierende Farbbild Split und Merge - ein Beispiel Task - der eingegebene Farbbild Swap platziert roten und blauen Kanal und berechnet das 1-Kanal-Bild, das die Helligkeit darstellt. Matte Bild imread (C: abc-blocks. png) lade das eingegebene Bild imshow (Eingabebild, Bild) Vektorebenen aufgeteilt (Bild, Ebenen) Partitionsbild in drei Kanalebenen imshow (blau, Ebenen 0) imshow (grün, Ebenen 1 ) Imshow (Rot, Ebenen 2) Vektor FlugzeugeIzm (3) Ändert die Rote und Blaue Seiten: FlugzeugeIzm 0 Flugzeuge 2 FlugzeugeIzm 1 Flugzeuge 1 EbenenIzm 2 Flugzeuge 0 Mat BildIzm Merge (PlanesIzm, imageIzm) imshow (Ergebnis, imageIzm) Berechnung der Helligkeit nach Auf die Formel 0.299 R 0.587 G 0.114 B (aber in der Tat, das Recht, mit cvtColor zu tun) Matte grau 0,299 Flugzeuge 2 0,587 Flugzeuge 1 0.114 Flugzeuge 0 imshow (grau, grau) Split und Merge - ein Beispiel für die Anwendung Split und Merge - mit Speicher 1. Sind Ihre Daten bei der Arbeit mit Split und Merge 2. Im obigen Beispiel - wenn Sie imageIzm ändern, werden die Dinge ändern, ob das Bild - die Antwort auf diese Fragen ist praktisch, objektiv 2. Per-Pixel-Operationen Per - Pixeloperationsschwelle - Threshold adaptiveThreshold - Adaptive Threshold () min, max - min, max () abs - absoluter Wert der Aufnahme () pow - exponentiation () sqrt - square root () randu - gefüllt mit zufälligen Werten () Schwelle - a Beschreibung Funktionsschwelle überschreitet die Schwellenverarbeitung des Bildes. Am häufigsten wird es verwendet, um Objekte von Interesse Pixel im Bild hervorzuheben. Schwelle - eine Liste der Optionen Ankündigung und Beschreibung der Parameterliste: Doppelschwelle (Const Mat src, Mat dst, Doppelschwelle, Double maxVal, int thresholdType) src unddst - Ein - und Ausgabe 1-Kanal-Bild. Erlaubt, gleich dst src zu sein. Schwelle - Schwellwert maxVal - Der neue Maximalwert (für THRESHBINARY, THRESHBINARYINV) Schwellenwerttyp - Typ der Funktion der Schwellenwertverarbeitung: THRESHBINARY THRESHBINARYINV THRESHTRUNC THRESHTOZERO THRESHTOZEROINV THRESHOTSU (- es gibt einen Schwellenwert automatisch und seinen Rückgabewert) - eine Liste Von Optionen thresholdType - Typ Schwellwertfunktion: THRESHBINARY THRESHBINARYINV THRESHTRUNC THRESHTOZERO THRESHTOZEROINV THRESHOTSU (- es gibt eine Schwelle automatisch und seine Rückgabewert) Schwelle - ein Beispiel für die Anwendung Problem - das Bild des Billardfeldes markieren die Pixel, die nicht Feld sind (Aufnahmebedingungen So dass das Feld - dunkel) Matte Bild imread (C: billiard. png) laden Sie das Eingangsbild imshow (Eingabebild, Bild) Vektorebenen aufgeteilt (Bild, Ebenen) Matte grau 0.299 Flugzeuge 2 0.587 Flugzeuge 1 0.114 Flugzeuge 0 Doppelschwelle 50.0 Der Schwellenwert wird empirisch eingeschränkt (grau, grau, 50,0, 255,0, CVTHRESHBINARY) imshow (Schwelle, grau) Schwelle - ein Anwendungsbeispiel Bitte beachten Sie: Wir haben nur Pixel nicht Feld identifiziert. Um die Koordinaten der Zentren der Kugeln und der Cue-Position zu finden, bedarf es einer weiteren Verarbeitung. Arbeiten mit Regionen Arbeiten mit Regionen floodFill - Zuordnung der verbundenen Regionen morphologische Operationen dilat - dilatation () erode - Erosion () floodFill - Beschreibung Funktion floodFill bietet einen Füllbereich, ausgehend von einem Pixel (x, y), mit spezifizierten Grenzen Abschalten mit einem 4 - oder 8 - benachbarte Pixel. Wichtig: Es verdirbt das Originalbild - wie es füllt. 1. Am häufigsten wird es verwendet, um Bereiche zu markieren, die durch die Schwellenverarbeitung identifiziert wurden, für die anschließende Analyse. 2. Es kann auch verwendet werden, um kleine Rauschen auf dem binären Bild zu entfernen (im Gegensatz zu der Erosionsdilatation - nicht die Grenzen größerer Flächen verderben). 3.If Verstärkung insgesamt Box im Bereich von 1 Pixel auf allen Seiten gefunden und machen die Füllung, die Art und Weise können Sie die interne Loch in der Gegend zu beseitigen. FloodFill - eine Liste der Optionen Ankündigung und Beschreibung der Parameterliste: int floodFill (Mat-Bild, Punktsamen, Skalar newVal, Rect rect 0 Skalar loDiff Skalar (), Skalar upDiff Skalar (), int Flags 4) Bild - Das Eingabebild , 1 - oder 3-Kanal, 8 oder 32-bit. Seed - Pixel, von dem aus anfangen zu reißen - Bounding Box gefunden durch das Feld loDiff, UpDiff - zulässiger Unterschied zu seinen Nachbarn (Oder - mit embryonalen Pixeln, wenn Flags FLOODFILLFIXEDRANGE) das heißt, ein neues Pixel muss Wert erfüllenNeue Wert - loDiffMiscellaneous Image Transformations adaptiveThreshold Gilt eine adaptive Schwelle für ein Array. C: void adaptiveThreshold (InputArray src. OutputArray dst. Double maxValue int adaptiveMethod. Int thresholdType. Int blockSize double C) Python: cv2. AdaptiveThreshold (src, maxValue, adaptiveMethod, thresholdType, BlockSize, C. dst) rarr dst C: void cvAdaptiveThreshold (const CvArr src. CvArr dst. doppelter Maximalwert int adaptivemethod CVADAPTIVETHRESHMEANC, int Schwellenwert CVTHRESHBINARY, int blockize 3, double param1 5) Python : Lebenslauf. AdaptiveThreshold (src, dst, maxValue, adaptivemethodCVADAPTIVETHRESHMEANC, thresholdTypeCVTHRESHBINARY, blockSize3, param15) rarr Keine src 8211 Quelle 8-Bit Einkanalbild. Dst 8211 Zielbild der gleichen Größe und der gleiche Typ wie src. MaxValue 8211 Nicht-Null-Wert, der den Pixeln zugeordnet ist, für die die Bedingung erfüllt ist. Siehe untenstehende Details. AdaptiveMethod 8211 Adaptive Schwellenwert-Algorithmus zu verwenden, ADAPTIVETHRESHMEANC oder ADAPTIVETHRESHGAUSSIANC. Siehe untenstehende Angaben. ThresholdType 8211 Schwellwertart, die entweder THRESHBINARY oder THRESHBINARYINV sein muss. BlockSize 8211 Größe einer Pixelumgebung, die verwendet wird, um einen Schwellenwert für das Pixel zu berechnen: 3, 5, 7 und so weiter. C 8211 Konstante subtrahiert vom mittleren oder gewichteten Mittel (siehe untenstehende Details). Normalerweise ist es positiv, kann aber auch null oder negativ sein. Die Funktion verwandelt ein Graustufenbild in ein Binärbild nach den Formeln: src 8211 Eingabebild: 8-Bit unsigned, 16-Bit unsigned (CV16UC.) Oder Single-Precision Gleitkomma. Dst 8211 Ausgabebild der gleichen Größe und Tiefe wie src. Code 8211 Farbraum Umwandlung Code (siehe die Beschreibung unten). DstCn 8211 Anzahl der Kanäle im Zielbild, wenn der Parameter 0 ist, wird die Anzahl der Kanäle automatisch von src und Code abgeleitet. Die Funktion konvertiert ein Eingabebild von einem Farbraum in ein anderes. Im Falle einer Umwandlung in den RGB-Farbraum sollte die Reihenfolge der Kanäle explizit (RGB oder BGR) angegeben werden. Beachten Sie, dass das Standard-Farbformat in OpenCV oft als RGB bezeichnet wird, aber es ist eigentlich BGR (die Bytes sind umgekehrt). So ist das erste Byte in einem Standard (24-Bit) - Farbbild eine 8-Bit-Blue-Komponente, das zweite Byte wird grün und das dritte Byte ist rot. Die vierte, fünfte und sechste Byte wäre dann das zweite Pixel (Blau, dann Grün, dann Rot) und so weiter. Die konventionellen Bereiche für R-, G - und B-Kanalwerte sind: 0 bis 255 für CV8U-Bilder 0 bis 65535 für CV16U-Bilder 0 bis 1 für CV32F-Bilder Bei linearen Transformationen spielt der Bereich keine Rolle. Aber im Falle einer nichtlinearen Transformation sollte ein eingegebenes RGB-Bild auf den richtigen Wertebereich normiert werden, um die korrekten Ergebnisse zu erhalten, zum Beispiel für die RGB-Luv-Transformation. Wenn Sie zum Beispiel ein 32-Bit-Gleitkomma-Bild direkt aus einem 8-Bit-Bild ohne Skalierung konvertieren, dann wird es den 0..255-Wertebereich anstelle von 0..1 haben, der von der Funktion übernommen wird. Also vor dem Aufruf von cvtColor. Sie müssen zuerst das Bild abschneiden: Wenn Sie cvtColor mit 8-Bit-Bildern verwenden, wird die Konvertierung einige Informationen verloren haben. Für viele Anwendungen wird dies nicht spürbar sein, aber es wird empfohlen, 32-Bit-Bilder in Anwendungen zu verwenden, die die gesamte Palette von Farben benötigen oder ein Bild vor einer Operation konvertieren und dann wieder umwandeln. Wenn die Umwandlung den Alphakanal hinzufügt, wird sein Wert auf das Maximum des entsprechenden Kanalbereichs eingestellt: 255 für CV8U. 65535 für CV16U. 1 für CV32F. Die Funktion kann folgende Transformationen durchführen: RGB GREY (CVBGR2GRAY, CVRGB2GRAY, CVGRAY2BGR, CVGRAY2RGB) Transformationen innerhalb des RGB-Raums wie das Hinzufügen des Alphakanals, Umkehren der Kanalreihenfolge, Umwandlung von 16-Bit-RGB-Farbe (R5: G6: B5 oder R5: G5: B5), sowie Umwandlung von Graustufen unter Verwendung von: (derzeit nicht unterstützt) L, u und v bleiben wie folgt Die obigen Formeln zur Umwandlung von RGB aus verschiedenen Farbräumen wurden aus mehreren Quellen im Web genommen, hauptsächlich aus Der Charles Poynton Standort poyntonColorFAQ. html Bayer RGB (CVBayerBG2BGR, CVBayerGB2BGR, CVBayerRG2BGR, CVBayerGR2BGR, CVBayerBG2RGB, CVBayerGB2RGB, CVBayerRG2RGB, CVBayerGR2RGB). Das Bayer-Muster ist weit verbreitet in CCD - und CMOS-Kameras. Es ermöglicht Ihnen, Farbbilder aus einer einzigen Ebene zu erhalten, in denen R-, G - und B-Pixel (Sensoren einer bestimmten Komponente) wie folgt verschachtelt sind: Die RGB-Komponenten eines Pixels werden von 1, 2 oder 4 Nachbarn der Interpolation interpoliert Pixel mit der gleichen Farbe. Es gibt mehrere Modifikationen des obigen Musters, die durch Verschieben des Musters ein Pixel links und ein Pixel erhalten werden können. Die beiden Buchstaben und in den Umwandlungskonstanten CVBayer 2BGR und CVBayer 2RGB geben den jeweiligen Mustertyp an. Dies sind Komponenten aus der zweiten Zeile, zweite und dritte Spalte. Zum Beispiel hat das oben genannte Muster einen sehr beliebten Typ 8220BG8221. DistanceTransform Berechnet den Abstand zum nächsten Nullpunkt für jedes Pixel des Quellbildes. C: void distanceTransform (InputArray src. OutputArray dst. Int distanceType int maskSize) C: void distanceTransform (InputArray src. OutputArray dst. OutputArray-Labels int distanceType int maskSize. Int labelType DISTLABELCCOMP) Python: cv2. DistanzTransform (src, distanceType, maskSize dst) rarr dst C: void cvDistTransform (const CvArr src. CvArr dst. Int distancetype CVDISTL2, int maskieren 3, const float mask NULL, CvArr Etiketten NULL, int labelType CVDISTLABELCCOMP) Python: cv. DistTransform (src, dst, distancetypeCVDISTL2, masksize3, maskNone, labelsNone) rarr Kein src 8211 8-Bit, einkanaliges (binäres) Quellbild. Dst 8211 Ausgabebild mit berechneten Abständen. Es ist ein 32-Bit-Gleitkomma-Einkanal-Bild von der gleichen Größe wie src. EntfernungTyp 8211 Art der Entfernung. Es kann CVDISTL1, CVDISTL2 sein. Oder CVDISTC. MaskSize 8211 Größe der Distanztransformationsmaske. Es kann 3, 5 oder CVDISTMASKPRECISE sein (die letztere Option wird nur durch die erste Funktion unterstützt). Im Falle des CVDISTL1- oder CVDISTC-Distanztyps wird der Parameter auf 3 gezwungen, da eine Maske das gleiche Ergebnis oder eine größere Blende ergibt. Etiketten 8211 Optionales Ausgabe-2D-Array von Etiketten (das diskrete Voronoi-Diagramm). Es hat den Typ CV32SC1 und die gleiche Größe wie src. Siehe untenstehende Details. LabelType 8211 Typ des Label-Arrays zum Erstellen. Wenn labelTypeDISTLABELCCOMP dann jede verbundene Komponente von Nullen in src (sowie alle nicht null Pixel, die der verbundenen Komponente am nächsten sind) demselben Label zugewiesen wird. Wenn labelTypeDISTLABELPIXEL dann jedes null Pixel (und alle nicht null Pixel am nächsten zu ihm) bekommt seine eigene Label. Die Funktionen distanceTransform berechnen den ungefähren oder genauen Abstand von jedem binären Bildpixel zum nächsten Nullpunkt. Bei Nullbildpixeln ist der Abstand offensichtlich Null. Wenn maskSize CVDISTMASKPRECISE und distanceType CVDISTL2. Die Funktion führt den in Felzenszwalb04 beschriebenen Algorithmus aus. Dieser Algorithmus ist mit der TBB-Bibliothek parallelisiert. In anderen Fällen wird der Algorithmus Borgefors86 verwendet. Dies bedeutet, dass für ein Pixel die Funktion den kürzesten Weg zum nächsten Nullpixel findet, der aus grundlegenden Verschiebungen besteht: horizontal, vertikal, diagonal oder knight8217s bewegen (das letzte ist für eine Maske verfügbar). Der Gesamtabstand wird als Summe dieser Grundabstände berechnet. Da die Distanzfunktion symmetrisch sein sollte, müssen alle horizontalen und vertikalen Verschiebungen die gleichen Kosten haben (als a bezeichnet), alle diagonalen Verschiebungen müssen die gleichen Kosten haben (mit b bezeichnet), und alle Ritter8217s bewegen müssen die gleichen Kosten haben (Mit c bezeichnet). Für die CVDISTC - und CVDISTL1-Typen wird der Abstand genau berechnet, während für CVDISTL2 (euklidischer Abstand) der Abstand nur mit einem relativen Fehler berechnet werden kann (eine Maske gibt genauere Ergebnisse). Für a, b. und C. OpenCV nutzt die im Originalpapier vorgeschlagenen Werte: Typischerweise für eine schnelle, grobe Distanzschätzung CVDISTL2. Eine Maske wird verwendet. Für eine genauere Distanzschätzung CVDISTL2. Eine Maske oder der genaue Algorithmus wird verwendet. Beachten Sie, dass sowohl die genaue als auch die ungefähre Algorithmen auf der Anzahl der Pixel linear sind. Die zweite Variante der Funktion berechnet nicht nur den minimalen Abstand für jedes Pixel, sondern identifiziert auch die nächstgelegene Komponente, die aus Nullpixeln (labelTypeDISTLABELCCOMP) oder dem nächsten Nullpixel (labelTypeDISTLABELPIXEL) besteht. Der Index des Komponentenpixels wird gespeichert. Wenn labelTypeDISTLABELCCOMP. Die Funktion findet im Eingangsbild automatisch verbundene Komponenten von Nullpixeln und markiert sie mit deutlichen Etiketten. Wenn labelTypeDISTLABELCCOMP. Die Funktion scannt durch das Eingangsbild und markiert alle Nullpunkte mit deutlichen Etiketten. In diesem Modus ist die Komplexität immer noch linear. Das heißt, die Funktion bietet eine sehr schnelle Möglichkeit, das Voronoi-Diagramm für ein binäres Bild zu berechnen. Derzeit kann die zweite Variante nur den ungefähren Distanztransformationsalgorithmus verwenden, d. h. maskSizeCVDISTMASKPRECISE wird noch nicht unterstützt. Ein Beispiel für die Verwendung der Distanztransformation finden Sie unter opencvsourcecodesamplescppdistrans. cpp (Python) Ein Beispiel für die Verwendung der Distanztransformation finden Sie unter opencvsourcesamplespython2distrans. py floodFill Füllt eine verbundene Komponente mit der angegebenen Farbe. C: int floodFill (InputOutputArray Bild Punkt SeedPoint Skalar newVal Rect rect 0, Skalar loDiff Skalar (), Skalar upDiff Skalar (), int Flags 4) C: int floodFill (InputOutputArray Bild. InputOutputArray Maske Punkt SeedPoint Skalar newVal Rect rect 0, Scalar loDiff Skalar (), Scalar upDiff Skalar (), int Flags 4) Python: cv2. (CVScalar) CvScalar CVScalarAll (0), CvScalar updiff cvScalarAll (0), CvConnectedComp comp NULL, int Flags 4, CvArr Maske NULL) Python: cv. FloodFill (Bild, Seedpoint, Newval, lodiff (0, 0, 0, 0), Aktualisierungen (0, 0, 0, 0), Flags4, MaskeNone) Rarr Comp Bild 8211 Inputoutput 1- oder 3-Kanal, 8 Bit, Oder Gleitkomma-Bild. Es wird durch die Funktion modifiziert, es sei denn, das FLOODFILLMASKONLY-Flag wird in der zweiten Variante der Funktion gesetzt. Siehe untenstehende Details. Maske 8211 Betriebsmaske, die ein Einkanal-8-Bit-Bild sein sollte, 2 Pixel breiter und 2 Pixel größer als Bild. Da es sich hierbei um einen Ein - und Ausgangsparameter handelt, müssen Sie die Initialisierung übernehmen. Flood-Füllung kann nicht über Pixel ungleich Null in der Eingabemaske gehen. Beispielsweise kann ein Randdetektorausgang als Maske verwendet werden, um das Füllen an Kanten zu stoppen. Bei der Ausgabe werden die Pixel in der Maske, die den gefüllten Pixeln im Bild entsprechen, auf 1 gesetzt oder auf den Wert, der in Flags angegeben ist, wie unten beschrieben. Es ist daher möglich, die gleiche Maske in mehreren Aufrufen der Funktion zu verwenden, um sicherzustellen, dass die gefüllten Bereiche nicht überlappen. SeedPoint 8211 Ausgangspunkt. NewVal 8211 Neuer Wert der neu gestalteten Domänenpixel. LoDiff 8211 Maximal niedriger Helligkeitsfarbdifferenz zwischen dem aktuell beobachteten Pixel und einem seiner Nachbarn, die zu der Komponente gehören, oder ein Samenpixel, das der Komponente hinzugefügt wird. UpDiff 8211 Maximaler oberer Helligkeitsfarbdifferenz zwischen dem aktuell beobachteten Pixel und einem seiner Nachbarn, die zu der Komponente gehören, oder ein Samenpixel, das der Komponente hinzugefügt wird. Rect 8211 Optionaler Ausgangsparameter, der durch die Funktion auf das minimale Begrenzungsrechteck der neu gestalteten Domäne gesetzt wird. Flaggen 8211Operationsflaggen. Die ersten 8 Bits enthalten einen Konnektivitätswert. Der Standardwert von 4 bedeutet, dass nur die vier nächsten Nachbarpixel (diejenigen, die eine Kante teilen) berücksichtigt werden. Ein Konnektivitätswert von 8 bedeutet, dass die acht nächstgelegenen Nachbarpixel (diejenigen, die eine Ecke teilen) berücksichtigt werden. Die nächsten 8 Bits (8-16) enthalten einen Wert zwischen 1 und 255, mit dem die Maske gefüllt werden soll (der Standardwert ist 1). Zum Beispiel werden 4 (255 ltlt 8) 4 nächstgelegene Nachbarn betrachten und die Maske mit einem Wert von 255 füllen. Die folgenden zusätzlichen Optionen belegen höhere Bits und können daher mit Bit-weise oder ( ): FLOODFILLFIXEDRANGE Wenn gesetzt, wird die Differenz zwischen dem aktuellen Pixel und dem Seed-Pixel berücksichtigt. Andernfalls wird der Unterschied zwischen benachbarten Pixeln berücksichtigt (dh der Bereich schwimmt). FLOODFILLMASKONLY Wenn gesetzt, ändert die Funktion das Bild nicht (newVal wird ignoriert) und füllt nur die Maske mit dem Wert, der in den Bits 8-16 der Flags angegeben ist, wie oben beschrieben. Diese Option ist nur in Funktionsvarianten sinnvoll, die den Maskenparameter haben. Die Funktionen floodFill füllen eine angeschlossene Komponente ab dem Saatpunkt mit der angegebenen Farbe. Die Konnektivität wird durch die Farbhelligkeitsnähe der Nachbarpixel bestimmt. Es wird angenommen, dass das Pixel bei der neu gestrichenen Domäne gehört, wenn: im Falle eines Graustufenbildes und eines schwimmenden Bereichs im Falle eines Farbbildes und eines festen Bereichs, wo der Wert eines der Pixelnachbarn ist, der bereits bekannt ist, zu der Komponente zu gehören. Das heißt, um der verbundenen Komponente hinzugefügt zu werden, sollte eine Farbdichte des Pixels nahe genug sein: Colorbrightness eines seiner Nachbarn, die bereits im Zusammenhang mit einem schwimmenden Bereich zur angeschlossenen Komponente gehören. Colorbrightness des Saatpunktes im Falle eines festen Bereichs. Verwenden Sie diese Funktionen, um entweder eine verbundene Komponente mit der angegebenen Farbe an Ort und Stelle zu markieren oder eine Maske zu erstellen und dann die Kontur zu extrahieren oder die Region in ein anderes Bild zu kopieren und so weiter. Ein Beispiel mit der FloodFill-Technik finden Sie unter opencvsourcecodesamplescppffilldemo. cpp (Python) Ein Beispiel mit der FloodFill-Technik finden Sie unter opencvsourcecodesamplespython2floodfill. cpp Berechnet das Integral eines Bildes. C: void integral (InputArray src. OutputArray Summe int sdepth -1) C: void integral (InputArray src. OutputArray Summe OutputArray sqsum. Int sdepth -1) C: void integral (InputArray src. OutputArray Summe OutputArray sqsum OutputArray Gekippt int sdepth -1) Python: cv2. Integral (src sum. Sdepth) rarr sum Python: cv2. Integral2 (src. Sum. Sqsum. Sdepth) rarr sum, sqsum Python: cv2. Integral3 (src. Summe sqsum. Gekippt sdepth) rarr sum, sqsum, gekippt C: void cvIntegral (const CvArr Bild CvArr Summe CvArr sqsum NULL, CvArr tiltedsum NULL) Python: cv. Integral (Bild, Summe, sqsumNone, tiltedSumNone) rarr Keine Die Funktionen berechnen ein oder mehrere integrale Bilder für das Quellbild wie folgt: Mit diesen integralen Bildern können Sie Summen-, Mittelwert - und Standardabweichungen über eine bestimmte Aufwärts - oder Rotation berechnen Rechteckiger Bereich des Bildes in einer konstanten Zeit, zum Beispiel: Es ist möglich, eine schnelle Unschärfe oder schnelle Blockkorrelation mit einer variablen Fenstergröße zu machen, zum Beispiel. Bei Mehrkanalbildern werden die Summen für jeden Kanal unabhängig voneinander akkumuliert. Als praktisches Beispiel zeigt die nächste Abbildung die Berechnung des Integrals eines geraden Rechtecks ​​Rect (3,3,3,2) und eines gekippten Rechtecks ​​Rect (5,1,2,3). Die ausgewählten Pixel im Originalbild werden ebenso angezeigt wie die relativen Pixel in der integralen Bildsumme und gekippt. Schwellenwert Gibt für jedes Arrayelement einen festen Schwellenwert an. C: doppelte Schwelle (InputArray src. OutputArray dst. Doppelter Schwellenwert doppelter Maximalwert int Typ) Python: cv2. Schwellenwert (src, drh, maxval, Typ dst) rarr retval, dst C: double cvThreshold (const CvArr src. CvArr dst. Doppelschwelle doppelter Maximalwert int thresholdtype) Python: cv. Threshold (src, dst, threshold, maxValue, thresholdType) rarr Keine src 8211 Eingabe-Array (Einkanal-, 8-Bit - oder 32-Bit-Gleitkomma). Dst 8211 Ausgabe-Array der gleichen Größe und Typ wie src. Schwellenwert 8211 Schwellenwert. Maxval 8211 maximaler Wert für die THRESHBINARY - und THRESHBINARYINV-Schwellwert-Typen. Typ 8211 Schwellenwertart (siehe untenstehende Angaben). Die Funktion gilt für eine Festnetz-Schwellenwertbildung zu einem Einkanal-Array. Die Funktion wird typischerweise verwendet, um ein zweistufiges (binäres) Bild aus einem Graustufenbild zu erhalten (vergleiche () könnte auch für diesen Zweck verwendet werden) oder zum Entfernen eines Rauschens, das heißt, Ausfiltern von Pixeln mit zu klein oder zu groß Werte. Es gibt mehrere Arten von Schwellwert, die von der Funktion unterstützt werden. Sie werden nach Typ bestimmt: Bild 8211 Eingabe 8-Bit 3-Kanal-Bild. Marker 8211 Inputoutput 32-Bit-Einkanal-Bild (Karte) von Markern. Es sollte die gleiche Größe wie Bild haben. Die Funktion implementiert eine der Varianten des wasserseitigen, nicht parametrischen Marker-basierten Segmentierungsalgorithmus, beschrieben in Meyer92. Bevor Sie das Bild an die Funktion übergeben, müssen Sie die gewünschten Bereiche in den Bildmarkierungen mit positiven (gt0) Indizes grob skizzieren. So wird jeder Bereich als eine oder mehrere verbundene Komponenten mit den Pixelwerten 1, 2, 3 und so weiter dargestellt. Solche Marker können aus einer Binärmaske mit findContours () und drawContours () abgerufen werden (siehe watershed. cpp demo). Die Marker sind 8220seeds8221 der zukünftigen Bildregionen. Alle anderen Pixel in Markierungen. Deren Beziehung zu den umrissenen Regionen nicht bekannt ist und durch den Algorithmus definiert werden sollte, sollte auf 08217s gesetzt werden. In der Funktionsausgabe wird jedes Pixel in Markierungen auf einen Wert der 8220seed8221-Komponenten oder auf -1 an den Grenzen zwischen den Regionen gesetzt. Visual Demonstrations - und Nutzungsbeispiel der Funktion finden Sie im OpenCV-Beispielverzeichnis (siehe watershed. cpp demo). Alle zwei benachbarten verbundenen Komponenten sind nicht notwendigerweise durch eine Wasserscheidegrenze (-18217s Pixel) getrennt, sie können sich in dem anfänglichen Markerbild, das an die Funktion übergeben wird, berühren. Ein Beispiel mit dem Watershed-Algorithmus finden Sie unter opencvsourcecodesamplescppwatershed. cpp (Python) Ein Beispiel mit dem Watershed-Algorithmus finden Sie unter opencvsourcecodesamplespython2watershed. py Führt den GrabCut-Algorithmus aus. C: void grabCut (InputArray img. InputOutputArray Maske Rect rect InputOutputArray bgdModel InputOutputArray fgdModel int iterCount int Modus GCEVAL) Python: cv2. GrabCut (img, mask, rect, bgdModel, fgdModel, iterCount. Mode) rarr Keine Inputoutput 8-bit Einkanal-Maske. Die Maske wird durch die Funktion initialisiert, wenn der Modus auf GCINITWITHRECT gesetzt ist. Seine Elemente können einen der folgenden Werte haben: GCBGD definiert einen offensichtlichen Hintergrundpixel. GCFGD definiert ein offensichtliches Vordergrund (Objekt) Pixel. GCPRBGD definiert ein mögliches Hintergrundpixel. GCPRFGD definiert ein mögliches Vordergrundpixel. Rect 8211 ROI mit einem segmentierten Objekt. Die Pixel außerhalb des ROI sind markiert als 8220von Hintergrund8221. Der Parameter wird nur verwendet, wenn modeGCINITWITHRECT. BgdModel 8211 Temporäres Array für das Hintergrundmodell. Ändern Sie es nicht, während Sie das gleiche Bild verarbeiten. FgdModel 8211 Temporäre Arrays für das Vordergrundmodell. Ändern Sie es nicht, während Sie das gleiche Bild verarbeiten. IterCount 8211 Anzahl der Iterationen, die der Algorithmus vor der Rückgabe des Ergebnisses vornehmen soll. Beachten Sie, dass das Ergebnis mit weiteren Anrufen mit modeGCINITWITHMASK oder modeGCEVAL verfeinert werden kann. Modus 8211Operationsmodus, der einer der folgenden sein könnte: GCINITWITHRECT Die Funktion initialisiert den Zustand und die Maske mit dem bereitgestellten Rechteck. Danach läuft es iterCount iterationen des Algorithmus. GCINITWITHMASK Die Funktion initialisiert den Zustand mit der mitgelieferten Maske. Beachten Sie, dass GCINITWITHRECT und GCINITWITHMASK kombiniert werden können. Dann werden alle Pixel außerhalb des ROI automatisch mit GCBGD initialisiert. GCEVAL Der Wert bedeutet, dass der Algorithmus gerade wieder aufgenommen werden soll. Die Funktion implementiert den GrabCut-Bildsegmentierungsalgorithmus. Sehen Sie die Probe grabcut. cpp, um zu lernen, wie man die Funktion benutzt. Cover von Adrian Kaehler, Gary Bradski Flood Fill Flood füllen Heckbert00 Shaw04 Vandevenne04 ist eine äußerst nützliche Funktion, die oft verwendet wird, um Teile eines Bildes für die weitere Verarbeitung oder Analyse zu markieren oder zu isolieren . Flood-Fill kann auch verwendet werden, um aus einem Eingabebild Masken abzuleiten, die für nachfolgende Routinen verwendet werden können, um die Verarbeitung auf nur die von der Maske angezeigten Pixel zu beschleunigen oder zu beschränken. Die Funktion cvFloodFill () selbst nimmt eine optionale Maske auf, die weiter verwendet werden kann, um zu steuern, wo die Füllung durchgeführt wird (z. B. bei mehreren Fills des gleichen Bildes). In OpenCV ist die Flutfüllung eine allgemeinere Version der Art der Fill-Funktionalität, die Sie wahrscheinlich bereits mit typischen Computer-Malerei-Programmen assoziieren. Für beide wird ein Samenpunkt aus einem Bild ausgewählt und dann werden alle ähnlichen benachbarten Punkte mit einer einheitlichen Farbe gefärbt. Der Unterschied hierbei ist, dass die benachbarten Pixel nicht alle farblich identisch sein müssen. 55 Das Ergebnis einer Flutfüllung ist immer eine einzige zusammenhängende Region. Die cvFloodFill () - Funktion färbt ein benachbartes Pixel, wenn es sich in einem bestimmten Bereich (lo Diff to up Diff) des aktuellen Pixels befindet oder wenn (abhängig von den Einstellungen der Flags) das benachbarte Pixel innerhalb eines bestimmten Bereichs des Originals liegt SeedPoint Wert. Die Hochwasserfüllung kann auch durch ein optionales Maskenargument eingeschränkt werden. Der Prototyp für die Flutfüllroutine ist: Abbildung 5-15. Ergebnisse der morphologischen Mit Safari lernen Sie, wie Sie am besten lernen. Holen Sie sich unbegrenzten Zugang zu Videos, Live-Online-Training, Lernpfade, Bücher, interaktive Tutorials und vieles mehr. Keine Kreditkarte benötigt

No comments:

Post a Comment