【发布时间】:2016-06-22 09:46:25
【问题描述】:
我正在尝试将 OpenCV 3.1 中的简要描述符用于 Android。为了实现 OpenCV 必须使用 _contrib 从源代码构建。所以我编译它没有错误,还可以在命令窗口中看到BRIEF.cpp.obeeing。
所以当我尝试使用它时,我的 android 应用程序崩溃并抛出
OpenCV 错误:静态 cv::javaDescriptorExtractor* cv::javaDescriptorExtractor::create(int)、文件 /home/maksim/workspace/android-pack/opencv/ 中的参数错误(不支持指定的描述符提取器类型。)模块/features2d/misc/java/src/cpp/features2d_manual.hpp,第 374 行
所以我检查了 features2d_manual.hpp。第 374 行是 switch case 块的默认表达式:
CV_WRAP static javaDescriptorExtractor* create( int extractorType )
{
//String name;
if (extractorType > OPPONENTEXTRACTOR)
{
//name = "Opponent";
extractorType -= OPPONENTEXTRACTOR;
}
Ptr<DescriptorExtractor> de;
switch(extractorType)
{
//case SIFT:
// name = name + "SIFT";
// break;
//case SURF:
// name = name + "SURF";
// break;
case ORB:
de = ORB::create();
break;
//case BRIEF:
// name = name + "BRIEF";
// break;
case BRISK:
de = BRISK::create();
break;
//case FREAK:
// name = name + "FREAK";
// break;
case AKAZE:
de = AKAZE::create();
break;
default: //**this is line 374**
CV_Error( Error::StsBadArg, "Specified descriptor extractor type is not supported." );
break;
}
return new javaDescriptorExtractor(de);
所以错误显然出现了,因为 case Brief 被注释了。所以我就这样修改了:
#include "opencv2/xfeatures2d.hpp"
。 . .
case BRIEF:
de = xfeatures2d::BriefDescriptorExtractor::create();
break;
。 . .
default:
CV_Error( Error::StsBadArg, "---TEST--- Specified descriptor extractor type is not supported." );
break;
}
在新目录中重新构建并使用新构建后,完全相同的错误仍然存在。消息中甚至没有“---TEST---”。
所以我想知道为什么我的更改没有任何效果。
我也想知道为什么文件路径是:
/home/maksim/workspace/android-pack/opencv/modules/features2d/misc/java/src/cpp/features2d_manual.hpp
这个目录甚至在我的系统上都不存在,谷歌搜索显示,/home/maksim/ 是 android 上许多不同错误消息的一部分。
构建前的实际路径是:
C:\Users\JJG-CD\Desktop\Build_Workspace\opencv-3.1.0\modules\features2d\misc\java\src\cpp\features2d_manual.hpp
我希望有人能向我解释问题是什么,并最终给我一个提示如何解决它。
【问题讨论】: