2016-08-01 30 views
-1

image I want to detect edges from: click here edges drawn by finding canny edges in program: click here ich die opencv Bibliothek Verarbeitung bin mit, so dass ich Kantenerkennung, um durchführen kann mein Bild in verschiedene Objekte/Komponenten aufzuteilen. Das habe ich mit der canny edge detection erreichen können. Dies gibt mir ein zweites Bild eines schwarzen Hintergrundes mit grauen Linien, die darstellen, wo Kanten erkannt wurden. Ich muss dann aber in der Lage sein, dieses schwarze Bild mit Rändern in erkennbare Regionen/Objekte zu trennen, die das Programm als anders versteht - ich dachte, ich könnte für jede Region, die von einer Kante begrenzt wird, eine eindeutige Farbe zuweisen. Dann wäre ich in der Lage, das Pixel-Array des gesamten Bildes zu durchlaufen und jede Region abhängig von ihrer einzigartigen Farbe unterschiedlich zu behandeln.Trennung eines Bildes in Komponenten ein Kantenerfassungsprogramm mit opencv Bibliotheken zur Verarbeitung von

Allerdings ist mein Problem, dass ich nicht weiß, wie man Verarbeitung erhält, um eine eindeutige Farbe für jede Region zuzuteilen, die durch eine Kante begrenzt wird. Ich habe versucht, for-Schleifen auf unzählige Arten zu verwenden, so dass es verschiedene Regionen finden und zuweisen kann, aber egal, was ich versuche, es hat nicht funktioniert. Ich frage mich, ob jemand irgendwelche Lösungen hat? Hier ist der Code:

import gab.opencv.*; 

import processing.video.*; 

OpenCV opencv; 
Capture src; 
PImage canny, ref, comb, comb2, tiles; 
color [] combColour = new color [0]; 
int c = 0; 
int threshold = 20; 

int a = 100; 
int b = 100; 
int x = 0; 
int y = 0; 
Boolean dir = true; 
int ydirection = 1; 
int xdirection = 1; 

void setup(){ 
    src = new Capture(this, 640, 480); 
    size(640, 480, P2D); 
    src.start(); 

    ref = createImage(width/2, height/2, HSB); 
    tiles = loadImage("tiles2.png"); 

    opencv = new OpenCV(this, tiles); 
    opencv.findCannyEdges(20, 75); 
    canny = opencv.getSnapshot(); 

} 

void draw(){ 
updatePixels(); 
src.read(); 



loadPixels(); 
pushMatrix(); 

image(tiles, 0, 0, width/2, height/2); 


opencv.loadImage(tiles); 
opencv.findCannyEdges(20, 75); 
canny = opencv.getSnapshot(); 




image(canny, 0, height/2, width/2, height/2); 
if (c == 5){ 
comb = get(0, height/2, width/2, height/2); 
comb2 = get(0, height/2, width/2, height/2); 
} 
if (c >= 5){ 
comb.loadPixels(); 
int loc = x + y*comb.width; 
color currentColor = comb.pixels[loc]; 
if (brightness(currentColor) < 10){ 

comb.pixels[loc] = color(hue(a), saturation(b), brightness(currentColor)); 

} 

else if (brightness(currentColor) > 150){ 
comb.pixels[loc] = currentColor; 
    if (a >= 235){ 

a = 0; 
} 
else{ 
a += 20; 
} 
if (b >= 235){ 
b = 0; 
} 
else { 
b += 20; 
} 

} 

if (y >= comb.height -1){ 
x += 1; 
y = 0; 
println("one" + x); 
} 
else{ 
y += 1; 
println("two" + y); 
} 

println("a " + a); 

comb.updatePixels(); 



image(comb, width/2, height/2); 
image(comb2, width/2, 0); 
} 

popMatrix(); 

updatePixels(); 

c += 1; 
} 
+0

Post-Beispielbilder. Haben Sie opencvs findContours Methode versucht? – Micka

+0

Vielleicht verbundene Komponenten? –

+0

Ich habe gerade den Post bearbeitet, um das Beispielbild, mit dem ich arbeite, und das zweite Bild der Kanten, die am Anfang des Posts gefunden wurden, aufzunehmen. Nein, ich habe die Methode findContours nicht versucht, aber ich habe es jetzt ausprobiert und es scheint nicht zu helfen. – mrrussel

Antwort

0

Ich bin wahrscheinlich zu spät, um diese Frage zu beantworten, aber sein kann, können Sie versuchen, mit Hough probabilistischer Transformation, http://docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html. Sobald Sie die Linien können Sie sie in (x, y) Koordinaten sortieren und füllen Sie die Regionen mit Ihren gewünschten, einzigartigen Farben. Das Bild, das du hochgeladen hast, sollte keine Probleme mit canny haben, nehme ich an. Lassen Sie mich wissen, wie es funktioniert.