2016-04-04 16 views
-1

Ich versuchte, 'cv :: Mat' aus 2D-Array zu bauen, aber ich finde, dass zusätzliche Nullen zur Matte hinzugefügt werden, die ich nicht verstehen kann. Der Code habe ich versucht, ist:Extra Nullen in OpenCV Mat

int a2D [7][7]; 
for(loop condition) 
{ 
    a2D[x][y] = value; 
    cout << "Value :"<< value << endl; 
} 
Mat outmat = Mat(7, 7, CV_8UC1, &a2D); 
cout << "Mat2D : "<< outmat << endl; 

Ausgang ist:

Value : 22 
Value : 179 
Value : 145 
Value : 170 
Value : 251 
Value : 250 
Value : 171 
Value : 134 
Value : 218 
Value : 178 
Value : 6 
....Upto 49 values. 
Mat2D : [ 22, 0, 0, 0, 179, 0, 0; 
    0, 145, 0, 0, 0, 170, 0; 
    0, 0, 251, 0, 0, 0, 250; 
    0, 0, 0, 171, 0, 0, 0; 
134, 0, 0, 0, 218, 0, 0; 
    0, 178, 0, 0, 0, 6, 0; 
    0, 0, 72, 0, 0, 0, 25] 

Wie in Mat2D Ausgang nach jedem Wert 3 Nullen sind added.Why und wie?

+0

Sie nehmen 4 Eingabewerte für Mat. Sie sollten überprüfen, wie Werte zugewiesen werden, wenn Mat initialisiert wird - höchstwahrscheinlich Standardwerte. – Krishna

Antwort

2

Sie verwenden int Puffer cv::Mat mit unsigned char Elementen zu initialisieren, das erklärt, warum Werte bei jedem vierten Elemente geschrieben werden (int scheint als unsigned char 4-mal größer zu sein, auf Ihrem Computer).

Das Ändern des Typs a2D zu unsigned char sollte das Problem beheben.

+0

Das behebt mein Problem. Ich habe nur den 'int' in 'unsigned char' geändert und es hat wie ein Zauber funktioniert !!! – Ravi

+0

Ich bin froh, dass es geholfen hat. Sie können die Antwort akzeptieren, um anderen mit dem gleichen Problem zu helfen, die Lösung schneller zu identifizieren. – alexisrozhkov

+0

Eigentlich, nachdem Sie die Frage bearbeitet haben, bin ich nicht sicher, ob Ihr Code gut funktioniert. Sie sollten das 1-dimensionale Array lieber an Ort und Stelle belassen und einfach die Indizierung korrigieren, wie 'a2D [y * 7 + x] = Wert;' – alexisrozhkov

0

Die Zuweisung a2D[x][y] = value ist falsch, wenn der Typ a2Dint[49] ist, schreiben Sie außerhalb des Arrays. Die 0s, die Sie sehen, sind nicht initialisierter Müll.

Sie müssen auf a2D mit einem einzigen Index zugreifen. Zum Beispiel: a2D[i] = value.

+0

Ich denke, es war nur eine Art Pseudo-Code, um das Setup zu demonstrieren, denn 'for (loop condition)' hätte nicht – alexisrozhkov

+0

Korrigiert den Tippfehler !! Sry – Ravi