Ich muss ein Bild mit OpenCV lesen, seine Größe erhalten und an einen Server senden, damit es das Bild verarbeitet und mir das extrahierte zurückgibt Eigenschaften.Speichern Sie eine cv :: Mat in einem Byte-Array für die Datenübertragung an einen Server
Ich habe gedacht, eine vector<byte>
zu verwenden, aber ich verstehe nicht, wie man die Daten zu einem cv :: Mat kopiert. Ich möchte es schnell machen, also versuche ich mit einem Zeiger auf die Daten zuzugreifen, aber ich habe eine Laufzeitausnahme. Ich habe so etwas.
Mat image = imread((path + "name.jpg"), 0);
vector<byte> v_char;
for(int i = 0; i < image.rows; i++)
{
for(int j = 0; j < image.cols; j++)
{
v_char.push_back(*(uchar*)(image.data+ i + j));
}
}
- Welches ist der beste Ansatz für diese Aufgabe?
Sicher, ich mag diesen Weg besser –
Warum brauchen Sie die für die memcpy? Warum nicht einfach den ganzen Speicher kopieren? –
Weil im Allgemeinen Mat :: Schritt unterscheidet sich von Mat :: Cols. Dadurch können Sie beispielsweise die Matrix zuschneiden, ohne die Bytes tatsächlich neu zu organisieren. Sie können eine Submatrix erstellen, die ein Fenster auf eine andere Matrix verweist, ohne Daten zu kopieren. Und wenn Sie eine Zelle in der Submatrix ändern, ändern Sie tatsächlich eine Zelle in der ursprünglichen Matrix, auf die nur die Submatrix verweist. – Dialecticus