标题修改在新鲜版本中不会生效

Header modifications do not take effect in fresh build

本文关键字:版本 修改 新鲜 标题      更新时间:2023-10-16

我试图在opencv 3.1中使用简短的描述符。为了实现该OPENCV,必须使用_contrib来构建OpenCV。因此,我没有错误编制了它,也可以在命令窗口内构建hive.cpp.o beeing。

所以当我尝试使用它时,我的Android应用程序崩溃

OPENCV错误:错误参数(不支持指定的描述符提取器类型。)在静态CV :: JavadescriptOrcriptoreXtractor* cv :: Javadesscriptorextractor :: create(int),file/home/maksim/workspace/workspace/android-pack/opencv/opencv/opencv/opencv/opencv/opencv/opencv/opencv/opencv/opencv/opencv/opencv/opencv/opencv/opencv/模块/功能2D/MISC/Java/src/cpp/features2d_manual.hpp,行374

所以我检查了功能2D_Manual.hpp。第374行是开关情况块的默认表达式:

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);

因此,出现了错误,因为案件摘要已评论。所以我像这样修改了:

#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;
        }

在新的目录中重建并使用新构建后,完全相同的错误是持续存在的。消息都没有包含" ---测试---"。

所以我想知道为什么我的更改没有任何效果。

我也想知道为什么文件路径是:

/home/maksim/workspace/android-pack/opencv/modules/features2d/misc/java/src/src/cpp/features2d_manual.hpp

这个杂物甚至在我的系统上甚至都不存在,并谷歌搜索显示,/home/maksim/是Android上许多不同错误消息的一部分。

构建前的实际路径是:

c: user jjg-cd desktop build_workspace opencv-3.1.0 modules modules features2d misc java java src src cpp cpp features2d_manual.hpp

我希望有人可以向我解释问题是什么,并最终给我一个提示如何解决问题。

您看到的错误几乎可以肯定来自您链接到使用相同标头文件的库。当您重新编译已更改标头的代码时,该标头更改仅对您实际编译的代码生效,而不是您还链接的库中已编译的代码。

查看您的编译线,并将所有-l选项视为可能的嫌疑犯。

这也解释了不存在的目录参考:此目录存在并在库本身(ies)本身被编译到所编译的任何机器上时使用。

如果您希望将标题更改在库代码中生效,则需要重新编译库本身。看看您的项目配置文件:您很可能已经有makecmake选项可以执行此操作。

我已经放弃了,但偶然找到了解决方案。我自己构建的库未使用的原因是这些库通常由OpenCV Manager应用程序提供。为了摆脱OpenCV管理器并使用自己的库,我只需要静态地初始化OpenCV。

static {
if (!OpenCVLoader.initDebug()) {
    // Handle initialization error}
}

可以在此处找到更多详细信息