2014-02-28 106 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++