2014-02-28 68 views
5

我想编译OpenCV 3.0的MATLAB绑定,即从Github当前构建。我不断收到以下错误:为OpenCV编译MATLAB绑定

CMake Error at /opencv/modules/matlab/compile.cmake:47 (message): 
    Failed to compile createCalibrateDebevec: 
    /opencv/build/modules/matlab/src/createCalibrateDebevec.cpp: 
    In function ‘void mexFunction(int, mxArray**, int, const mxArray**)’: 

    /opencv/build/modules/matlab/src/createCalibrateDebevec.cpp:46:3: 
    error: ‘Ptr_CalibrateDebevec’ was not declared in this scope 

这发生在多个文件中。我发现这thread,其中讨论了一些补救措施,即。在bridge.hpp文件中添加一些typedefs,但编译时会导致更多错误。我也发现这个thread建议删除有问题的.cpp文件和编译。这导致了无错误的编译,然后是通常的make install。然而,从MATLAB内部调用任何OpenCV的功能现在将会导致错误,如:

If = cv.dft(I, 'flags', cv.DFT_COMPLEX_OUTPUT); 
Error using dft 
cv::exception caught: 
/home/xxx/opencv-master/modules/core/src/dxt.cpp:1760: error: (-215) 
type == CV_32FC1 || type == CV_32FC2 || type == CV_64FC1 || type == CV_64FC2 
in function dft 

另一个错误示例:

im_denoise = cv.fastNlMeansDenoising(im_noise, 18); 
Error using fastNlMeansDenoising 
cv::exception caught: 
/home/xxx/opencv-master/modules/photo/src/fast_nlmeans_denoising_invoker.hpp:146: 
error: (-215) almost_dist2weight_[0] == fixed_point_mult_ in function 
FastNlMeansDenoisingInvoker 

就如何解决这些问题的任何帮助,非常感谢!

+0

@AruniRC - 你开始一个赏金,因为“这个问题还没有收到足够的重视” - 但你不提供有关答案和建议,您的任何反馈到这里......这不是正确的方式来获得关注。 – Shai

+0

我能够编译并链接所有内容,没有任何错误。我只是确保我编译时使用的每个库/ sdks都具有相同的体系结构。例如,如果你的matlab是64位的,那么确保你在CMake中选择了64位编译器,并找到一个64位的Python。但是,不知何故,matlab文件不伴随他们的mex文件。我可以看到生成的所有.cpp文件,但编译和安装后没有编译mex。 – masad

回答

3

关于'cv::exception caught'错误,您将获得:好像cv期待的输入图像(或者singledouble'CV_32FC1''CV_64FC1'分别)是浮点类型的。
尝试使用im2singleim2double将输入图像Iim_noise转换为浮点数,然后查看这些错误是否重现。

+0

这引发了新的错误。猜猜我会等待MATLAB绑定与OpenCV的下一个正式版本一起发布。但感谢您的答案。 –

2

你可能想看看this tutorial关于编译最新的OpenCV 3.0开发的matlab mex。

它还包含了OpenCV的MATLAB预编译的二进制文件,以及C++