Zum Inhalt springen

2 dimensionales Array an Funktion uebergeben


mariejo

Empfohlene Beiträge

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 :rolleyes:

//******************************************************************************************

//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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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]

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...