Zum Inhalt springen

2 dimensionales Array an Funktion uebergeben


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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]

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