안녕하세요 SURF 설명자에서 데이터를 추출하려고하는데 ORB 설명자를 사용하여 이것을 시도하면 작동합니다. SURF를 사용할 때 프로그램은 base64 인 코드 행에서 세그먼트 화 오류 11로 종료되고이 사이트의 base64 함수를 사용합니다 (Encoding and decoding base64).인코딩 CV_32FC1 mat64 데이터 (base64)
ORB 디스크립터의 형식은 CV_8UC1
이고 SURF 디스크립터는 CV_32FC1
입니다. 그래서 base64는 8 비트 부호없는 char 대신 32 비트 float을 인코딩해야합니다.
어떻게하면됩니까?
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
좀 더 구체적으로 작성하십시오. 세그 폴트는 어떤 라인에서 발생합니까? – Aurelius
당신이 옳다는 점에 유감스럽게 생각하며, 더 많은 정보로 질문을 업데이트했습니다. – tversteeg
설명자 데이터가 'NULL'인 경우에만 segfault를 재현 할 수 있습니다. 또한, 내 편집 된 답변을 참조하십시오. 편집 한 질문이 훨씬 더 정확하고 실제 문제를보다 정확하게 설명합니다. 또한 질문이 "내 코드를 디버그 해주십시오."라는 요청에 부응하지 않으면 좋은 대답을 얻을 가능성이 훨씬 높아집니다. – Aurelius