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]

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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