Я пытаюсь кодировать изображение Mat CV_32FC1, чтобы отправить его через Интернет с base64, процесс работает, но OpenCV кодирует в неправильном формате. Пример:
vector<unsigned char> buffer;
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PXM_BINARY);
compression_params.push_back(0);
cv::imencode(".pgm", desc, buffer, compression_params);
printf("%s", &buffer[0]);
Это создает следующий вывод:
P2
64 15
255
0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
etc..
В соответствии с параметром сжатия и первым параметром (P2) он не должен быть закодирован как двоичный формат, это должен быть ASCII. (Источник)
Само по себе это не проблема, но когда я меняюсь compression_params.push_back(0)
в compression_params.push_back(1)
Я получаю этот вывод (без данных изображения):
P5
64 15
255
Я использую OpenCV 2.4.4 на iOS, как я могу это исправить или, как альтернативно, как я могу отправить Мат лучше, без потери данных?
Не знаю, решили ли вы свою проблему, но я выяснил проблему, и она может относиться и к вашему делу, даже если вы используете версию для iOS, с которой я не знаком:
Как мне захватывать изображения в OpenCV и сохранять в формате pgm?
Других решений пока нет …