Veröffentlicht 29. März 200718 j 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
29. März 200718 j 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]
29. März 200718 j Ich habe gerade mal im Lexikon nachgeschlagen was das Wort Rekursion bedeutet: dort steht aber nur Rekursion, die: siehe Rekursion :uli :eek Reinhold
29. März 200718 j 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ß
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.