Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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]

Ich habe gerade mal im Lexikon nachgeschlagen was das Wort Rekursion bedeutet: dort steht aber nur

Rekursion, die: siehe Rekursion

:uli :eek :D

Reinhold

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.