こんにちは私はSURF記述子からデータを抽出しようとしています。これをORB記述子で試してみると機能します。SURFを使用すると、プログラムはbase64エンコードラインのセグメンテーション違反11で終了します。このサイトのbase64関数を使用します:base64のエンコードとデコード。
正確な問題は、ORB記述子の形式がCV_8UC1
とSURF記述子であるということCV_32FC1
です。したがって、8ビットのunsignedcharではなく32ビットのfloatをbase64でエンコードする必要があります。
これどうやってするの?
Mat desc;
vector<KeyPoint> kp;
SurfFeatureDetector detector(500);
SurfDescriptorExtractor extractor;
// OrbDescriptorExtractor extractor; This works
detector.detect(image, kp);
extractor.compute(image, kp, desc);
desc.convertTo(desc, CV_8UC1, 255, 0);
unsigned char const* inBuffer = reinterpret_cast<unsigned char const*>(desc.data);
unsigned int in_len = desc.total();
string code = base64_encode(inBuffer, in_len).c_str(); // This line causes the error