Skip to main content

Opencv översvämnings fill binära alternativ


Den här frågan har redan ett svar här: Jag har en kantkarta extraherad från kantdetektionsmodulen i OpenCV (kanny kantdetektering). Vad jag vill göra är att fylla hålen i kantkartan. Jag använder C. och OpenCV-bibliotek. I OpenCV finns en cvFloodFill () - funktion, och den kommer att fylla hålen med ett frö (med en av platsen för att börja översvämning). Jag försöker dock fylla alla inre hål utan att veta fröna. (Liknande imfill () i MATLAB) Q1: hur man hittar alla fröna, så att jag kunde ansöka cvFloodFill () Q2: hur man genomför en imfill ) Ekvivalent Nybörjare i OpenCV, och några tips är uppskattade. frågade 11 november 09 kl 16:19 Amro 105k 9679 19 9679 171 9679 314 markerad som duplikat av Shai matlab Användare med matlab-märket kan manuellt stänga matlabfrågor som duplikat och öppna dem igen efter behov. Jun 5 14 at 8:52 Denna fråga har blivit ombedd tidigare och har redan ett svar. Om svaren inte tar upp din fråga helt, fråga en ny fråga. Enligt dokumentationen av imfill i MATLAB: Därför för att få hålpixlarna, ring ett samtal till cvFloodFill med bildens vänstra hörnpunkt som en frö. Du får hålen genom att komplettera bilden som erhållits i föregående steg. MATLAB Exempel: svarat 11 november 09 kl 18:02 Amro 105k 9679 19 9679 171 9679 314 that39s awesome, Amro Tack. Ndash Lily 11 nov 09 kl 20:17 Mycket trevligt. Jag försökte räkna ut hur man gör detta utan att förlita sig på hålflaggan i imfill. Jag gillar att göra detta på OpenCV Python och du har visat mig vägen. Tack Amro ndash rayryeng Sep 3 14 kl 16:49 Funktionen cvDrawContours har ett alternativ att fylla i de konturer du har ritat. Här är ett kort exempel cvDrawContours (IplImage, konturer, färg, färg, -1, CVFILLED, 8) Här är dokumentationen som jag antar att du postade det här länge sedan, men jag hoppas det hjälper någon. Detta är källkoden (i C): Jag har tittat runt på internet för att hitta en riktig imfill-funktion (som den i Matlab) men arbetar i C med OpenCV. Efter några reaserches kom jag äntligen fram till en lösning. Tricket är i parametervärdet för cvDrawContours-funktionen: cvDrawContours (dst, kontur, vit, vit, 0, CVFILLED) dst-destinationsbildskonturpekare till den första konturvita färgen som används för att fylla konturen 0 Maximal nivå för tecknade konturer. Om 0, bara kontur dras CVFILLED Tjocklek linjer konturerna ritas med. Om det är negativt (till exempel, CVFILLED) ritas konturinredningarna. Mer information finns i openCV-dokumentationen. Det finns förmodligen ett sätt att få dst direkt som en binär bild men jag kunde inte hitta hur man använder cvDrawContours-funktionen med binära värden. svarat 15 apr 13 kl 12:54 Här är ett snabbt och smutsigt tillvägagångssätt: Utför kanny på din inmatningsbild så att den nya binära bilden har 1s vid kanterna och annars finner den första 0 längs en sida av din kantbild och initierar en översvämning med 1s vid den tiden på en tom bild med din kantbild som masken. (Hoppade här att vi inte fick otur och fröna den här första fyllningen på insidan av en form som är halvvägs på skärmen) Den här nya översvämmade bilden är bakgrunden. Varje pixel här som har en 1 är bakgrunden, och en pixel som har en 0 är förgrunden. Loop genom bilden och hitta några förgrunds pixlar. Se en översvämning på någon som du hittar. ELLER den här nya översvämmade bilden med din Canny-bild från steg 1, och du är klar. svarade jan 26 10 kl 18:41 jag försökte använda floodfill i min källkod men programmet fungerar inte och det här är min kod: slutlig bitmapp bitmapp bitmapfactory. decodefile (fileUri. getPath (), alternativ) mat tmp ny mat (bitmap. getwidth (), bitmap. getHeight (), CvType. CV8UC1) Mat grå ny Mat (bitmap. getWidth (), bitmap. getHeight (), CvType. CV8UC1) Imgproc. cvtColor (tmp, grå, Imgproc. COLORRGB2GRAY) Matstubben ny Mat (gray. rows () 2, gray. cols () 2, CvType. CV8U) Imgproc. floodFill (grå, stub, ny punkt (0, 0), ny skalär (255, 255, 255)) har du nått något för att Jag har att göra med samma problem Frågor Verktyg Senast uppdaterad: Jan 30 Relaterade frågor Copyright Itseez. 2012-2016. Innehållet på denna webbplats är licensierat enligt en Creative Commons Attribution Share Alike 3.0-licens. Observera: OpenCV-svar kräver att javascript ska fungera korrekt, vänligen aktivera javascript i din webbläsare, här är howFlood-fyllning av Adrian Kaehler, Gary Bradski Flood Fill Flood-fyllning Heckbert00 Shaw04 Vandevenne04 är en extremt användbar funktion som ofta används för att markera eller isolera delar av en bild för vidare bearbetning eller analys. Översvämningsfyllning kan också användas för att härleda, från en ingående bild, masker som kan användas för efterföljande rutiner för att påskynda eller begränsa bearbetningen till endast de pixlar som indikeras av masken. Funktionen cvFloodFill () själv tar en valfri mask som kan användas för att styra var fyllningen är klar (t ex när flera fyllningar fylls i samma bild). I OpenCV är översvämningsfyllning en mer generell version av den typ av fyllningsfunktionalitet som du förmodligen redan associerar med typiska datorprogrammeringsprogram. För båda väljes en fröpunkt från en bild och alla liknande grannpunkter är färgade med en likformig färg. Skillnaden här är att de närliggande pixlarna inte behöver alla vara identiska i färg. 55 Resultatet av en flodfyllningsoperation kommer alltid att vara en enda sammanhängande region. Funktionen cvFloodFill () kommer att färga en angränsande pixel om den ligger inom ett angivet intervall (Lo Diff to up Diff) för antingen den aktuella pixeln eller om (beroende på flaggarnas inställningar) är den närliggande pixeln inom ett specificerat intervall av originalet seedPoint-värde. Fyllningsfyllning kan också begränsas av ett valfritt maskargument. Prototypen för översvämningsrutinen är: Figur 5-15. Resultat av den morfologiska. Hitta den exakta informationen du behöver för att lösa ett problem i flygningen, eller gå djupare för att behärska de tekniker och färdigheter du behöver för att lyckas

Comments