iOSでアプリケーションを作成しており、keyPointのリスト(これは機能します)とMat
から生成された画像を送信しOrbDescriptorExtractor
ます。画像の送信は機能します。受信したbase64はbase64送信と同じです。だから私の推測では、それはエンコードとデコードでうまくいかないでしょう。
左側の画像はエンコード前で、右側の画像はサーバーで受信されたデコードされた画像です。
これは(desc)画像をbase64でエンコードするコードです。Mat
私が使用したbase64関数はこのサイトのものです。
char sendFile[1000];
char temp[100];
std::sprintf(temp, "^^%d^^%d^^", desc.cols, desc.rows);
strcat(sendFile, temp);
const unsigned char* inBuffer = reinterpret_cast<const unsigned char*>(desc.data);
strcat(sendFile, base64_encode(inBuffer, strlen((char*)inBuffer)).c_str());
strcat(sendFile, "\0");
この後、ファイルはサーバー上のHTTP Postで保存されexec()
、PHPでC++スクリプトが開かれます。これは機能します。
この後、画像は次のようにデコードされます。
int processData(string input, int* width, int* height){
int cur = 0, k = 0;
for(unsigned int i = 0; i < input.length(); i++){
if(input.substr(i, 2) == "^^"){
if(cur == 0){
k = i + 2;
}else if(cur == 1){
*width = getIntFromString(input, k, i);
k = i + 2;
}else{
*height = getIntFromString(input, k, i);
break;
}
cur++;
}
}
return 0;
}
int error, w, h;
string line, data;
ifstream file;
file.open(argv[1]);
if(file.is_open()){
error = processData(line, &w, &h);
if(error != 0){
printf("Processing keypoints failed \n");
return 1;
}
getline(file, line);
data = base64_decode(line);
file.close();
}else{
printf("Couldn't open file.\n");
return 1;
}
Mat tex_des(Size(w, h), CV_8UC1, (void*)data.c_str());
データを失うことなく、OpenCVイメージを正しい方法で送信するにはどうすればよいですか?