Здравствуйте, я пытаюсь извлечь данные из дескриптора SURF, когда я пытаюсь использовать этот дескриптор ORB, он работает. Когда я использую SURF, программа завершает работу с ошибкой сегментации 11 в кодировке base64, я использую функцию base64 с этого сайта: Encoding and decoding base64.Кодирование CV_32FC1 Данные мата с base64
Точная проблема заключается в том, что формат дескриптора ORB составляет CV_8UC1
и дескриптор SURF CV_32FC1
. Поэтому я должен base64 кодировать 32-битный float вместо 8-битного беззнакового символа.
Как это сделать?
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
Пожалуйста, будьте более конкретными. Какая строка вызывает segfault? – Aurelius
Прошу прощения, что вы правы, я уточнил вопрос с дополнительной информацией. – tversteeg
Я могу воспроизвести segfault только тогда, когда данные дескриптора 'NULL'. Также см. Мой отредактированный ответ. Ваш отредактированный вопрос намного лучше, и более точно описывает вашу фактическую проблему. Также обратите внимание, что у вас будет гораздо больше шансов получить хорошие ответы, если ваши вопросы не сводятся к просьбам «отлаживать мой код для меня». – Aurelius