Ich wäre ja froh wenn es das wäre.

Die Daten liegen sequentiell im Speicher. K ist der Zähler für das kontinuierliche Array, i und j die für Zeilen und Spalten.
Dabei gilt : k = i * image.size().width + j


Das hier:

Code:
for( i = 0, k = 0 ; i < image.size().height ; i++ ) {
        for( j = 0 ; j < image.size().width ; j++, k++ ) {
            image_data[k][0] = image.at<double>(i, j);
            image_data[k][1] = 0.0;
        }
    }
entspricht dem hier:

Code:
    
/* load images' data to FFTW input*/
    for( k = 0 ; k < size ; k++ ) {
        image_data[k][0] = ((double *) image.data)[k];
        image_data[k][1] = 0.0;
    }
Der fancy image.at operator erspart einem nur den Pointer-Typecast und man kann direkt Pixel adressieren ohne sich über die Repräsentation im Speicher im klaren zu sein. (Deswegen muss hier auch explizit dach (double*) gecasted werden weil ich den Datentyp kenne.) Zweiteres ist halt schneller aber hässlicher.