mariejo Geschrieben 29. März 2007 Geschrieben 29. März 2007 Hallo, ich habe folgendes Problem: Ich möchte in einem 2-Dimensionales Array (momentan nur aus bestehend 0 und 1 Feldern = einem Binärbild) Seqmente finden und zusammenhängende 1er Felder mit einem gemeinsamen Label beschriften (in diesem Falle geht dann das Label von 2 bis n und wird gesetzt indem ich einfach die 1 im Feld mit dem jeweiligen Wert ueberschreibe. Das ganze versuche ich rekursiv, habe aber ein Problem bei der Uebergabe des Arrays (=grid[resX][resY]) an die Rekursion. Wäre super wenn mir jemand einen Tipp geben könnte was ich falsch mache. Bin nicht so wirklich erfahren in C++ und vorallem nicht mit Rekursionen. Das macht mir diverse Gehirnverknotungen //****************************************************************************************** //initialisierung der Array-Grössen (momentan global) int resX = 500; int resY = 500; ... //segmentierungsfunktion void doSegmentation(int **grid, int x, int y, int label) { grid[x][y] = label; //gehe ueber alle 8 nachbarn des aktuellen pixels und gehe in rekursion wenn ein Pixel mit 1 belegt ist (d.h. nicht 0 und nicht schon gelabelt) for (int dy=-1; dy<=1; dy++) { for (int dx=-1; dx<=1; dx++) { if(grid[x+dx][y+dy] == 1) { //TODO: ueberpruefe hier ob nachbar vorhanden und != grid[x][y] doSegmentation(grid, x+dx, y+dy, label); cout<<"in recursion"<<endl; } else continue; } } return; } ...... //startpunkt der Rekursion int label = 2; //gehe ueber 2 dim array von 1 bis res-2 //wenn pixel ==1 gehe in rekursion for(int i=1; i<resX-1; i++) { for(int j=1; j<resY-1; j++){ if(grid[i][j]==1) { doSegmentation(grid, i, j, label); //uebergabe grid an rekursion } label++; } } //****************************************************************************************** compilerfehler ist momentan folgender: cannot convert 'int(*)[((resY-1)+1]' to 'int**' for argument '1' to 'void doSegmentation(int**,int,int,int)' ******************************************************************************************* viele gruesse, marie Zitieren
Guybrush Threepwood Geschrieben 29. März 2007 Geschrieben 29. März 2007 Ich glaub wenn das ein festes Array ist dann musst du die Größe im Funktionskopf mitangeben. Also so gehts auf jeden Fall: #include <stdio.h> void foo(int i[3][4],int dim1, int dim2) { for (int a=0; a<dim1; ++a) { for(int b=0; b<dim2; ++ printf ("%i,",i[a][b]); printf("\n"); } } int main() { int array[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; foo(array,3,4); return 0; } [/PHP] Zitieren
Reinhold Geschrieben 29. März 2007 Geschrieben 29. März 2007 Ich habe gerade mal im Lexikon nachgeschlagen was das Wort Rekursion bedeutet: dort steht aber nur Rekursion, die: siehe Rekursion :uli :eek Reinhold Zitieren
pit030771 Geschrieben 29. März 2007 Geschrieben 29. März 2007 Die zweite, dritte .... Dimension muss immer angegeben werden bei der übergabe an Funktionen. Die Definition sollte so aussehen.... void foo(int (*arrayf)[hier die größe die du brauchst]) Rekursion - Wikipedia gruß Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.