2017-12-05 3 views
-1

I diese Funktion OpenCV mit einer bestimmten C-Array zu füllen verwendet:Convert OpenCV Matrix C Array mit CUDA verwendet werden

float data[9] = { 1, 0.5,-51,0,1,50,0,0,1}; 
Mat myH = cv::Mat(3, 3, CV_32F, data); 

aber ich fragen, ob es eine andere Funktion ist, die das Gegenteil, wie dies für Matrix tut A:

float myArray [Size_Of_A] = Mat A; 

ich weiß, dass ich es mit einer Schleife tun, aber es ist meine letzte Option, wenn es keine Funktion, es zu tun ist. Die Schleife wäre wie:

float myArray[size_of_A]; 
for (int row = 0; row < A.rows; row++) 
    for (int col = 0; col < A.cols; col++) 
     myArray[row * A.cols + col ] = A.at<float>(row, col); 

ich brauche ein Bild zu CUDA Kernel zu senden.

+2

'float * myArray = meinH.ptr ();' – Miki

+0

so kann ich einfach den neuen Zeiger für den Kernel verwenden, keine Notwendigkeit, irgendetwas zu kopieren, nicht wahr? –

+2

Daten sollten auf das Gerät kopiert werden, oder? Sie können das 'float *' auf die Daten innerhalb der Matrix auf diese Weise bekommen (keine Kopie), dann müssen Sie die Daten auf das Gerät kopieren (kopieren) – Miki

Antwort

0

ich von Miki Kommentar diese Antwort bekam,

float* myArray = myH.ptr<float>(); 

so dass keine Notwendigkeit, die Daten auf der Host-Seite duplizieren, und wir können mit dem neuen Zeiger auf das Gerät kopieren ‚myArray‘.