【发布时间】:2013-03-07 15:13:01
【问题描述】:
您好,我正在尝试从 SURF 描述符中提取数据,当我尝试使用 ORB 描述符时,它可以工作。当我使用 SURF 时,程序退出并在 base64 编码行出现分段错误 11,我使用该站点的 base64 函数:Encoding and decoding base64。
确切的问题是 ORB 描述符的格式是 CV_8UC1 和 SURF 描述符 CV_32FC1。所以我必须 base64 编码一个 32 位浮点数而不是 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
【问题讨论】:
-
请更具体一点。哪一行导致了段错误?
-
对不起,你是对的,我更新了问题,提供了更多信息。
-
只能在描述符数据为
NULL时重现段错误。另外,请参阅我编辑的答案。您编辑的问题要好得多,并且更准确地描述了您的实际问题。另请注意,如果您的问题不归结为“请为我调试我的代码”请求,您将更有可能得到好的答案。 -
是的,我同意我的问题这样更好,但我认为问题出在其他地方。而且我没有必要找人来调试我的代码,我试图找到问题所在以及如何解决它的指针;我真的很想了解自己,但是关于这些主题的文档非常有限。
-
啊,可以理解。我无意冒犯。
标签: c++ opencv base64 surf feature-descriptor