0

我尝试使用演示代码来检测和匹配 David Lowe (lowe@cs.ubc.ca) 的 SIFT 特征

在我的代码中。所以我在 Matlab 中编译 (.m) 文件以生成 DLL。Matlab中的命令代码如下:

           mcc -B csharedlib:SiftMatch match.m sift.m -v

但是,当我在我的 C++ 代码(VS2010 下)中使用 DLL 时,出现了一个问题:

              SiftMatchInitialize();
   This function returned false. I could not initialize the library.

和调试表明:

    bool MW_CALL_CONV SiftMatchInitializeWithHandlers(
    mclOutputHandlerFcn error_handler,
    mclOutputHandlerFcn print_handler)
{
    int bResult = 0;
  if (_mcr_inst != NULL)
    return true;
  if (!mclmcrInitialize())
    return false;
  if (!GetModuleFileName(GetModuleHandle("SiftMatch"), path_to_dll, _MAX_PATH))
    return false;
    {
        mclCtfStream ctfStream = 
            mclGetEmbeddedCtfStream(path_to_dll);
        if (ctfStream) {
            bResult = mclInitializeComponentInstanceEmbedded(   &_mcr_inst,
                                                                error_handler, 
                                                                print_handler,
                                                                ctfStream);
            mclDestroyStream(ctfStream);
        } else {
            bResult = 0;
        }
    }  
    if (!bResult)
    return false;
  return true;
}

在这个函数中,ctfStream 为 NULL,bResult 等于 0。那么,有什么问题呢?

4

1 回答 1

1

不要将 MATLAB Compiler 生成的 .c/.cpp 文件包含到您的项目中。只需要头文件和 .lib 文件。

于 2016-02-12T06:15:35.297 回答