【发布时间】:2020-07-31 13:34:51
【问题描述】:
我正在尝试编译 OpenCV 以使其具有 sift 模块。
我使用 this tutorial 下载了 CMake。
我还下载并解压了 opencv-4.3.0 和 opencv_contrib。
我创建了一个空文件夹,打开终端,然后使用以下行导航到它:
cd ~/opencvMaster/build
然后,当我在终端的这个空文件夹中时,我运行了以下行:
cmake -DOPENCV_ENABLE_NONFREE:BOOL=ON -DOPENCV_EXTRA_MODULES_PATH= ~/openCVMaster/opencv_contrib-master/modules ~/openCVMaster/opencv-4.3.0
它配置并生成了文件。然后我输入make。得到以下错误:
[ 82%] Building CXX object modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/boostdesc.cpp.o
~/opencvMaster/opencv_contrib-e6f32c6a69043456a806a4e802ee3ce7b7059c93/modules/xfeatures2d/src/boostdesc.cpp:654:20: fatal error: boostdesc_bgm.i: No such file or directory
#include "boostdesc_bgm.i"
^~~~~~~~~~~~~~~~~
compilation terminated.
我按照here的建议,添加了以下文件:
cd ~/openCVMaster/opencv_contrib-4.3.0/modules/xfeatures2d/src
curl wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_lbgm.i >boostdesc_lbgm.i
curl wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_256.i >boostdesc_binboost_256.i
curl wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_128.i >boostdesc_binboost_128.i
curl wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_064.i >boostdesc_binboost_064.i
curl wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_hd.i >boostdesc_bgm_hd.i
curl wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_bi.i >boostdesc_bgm_bi.i
curl wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm.i >boostdesc_bgm.i
curl wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_120.i > vgg_generated_120.i
curl wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_64.i >vgg_generated_64.i
curl wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_48.i >vgg_generated_48.i
curl wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_80.i >vgg_generated_80.i
这是向前迈出的一步:不再出现与 vgg 或 boostdesc 相关的错误。出现新错误:opencv_contrib-master/modules/xfeatures2d/test/test_features2d.cpp:51:10: fatal error: features2d/test/test_detectors_regression.impl.hpp: No such file or directory
听从阿妈here的建议,我下载了https://github.com/opencv/opencv/tree/master/modules。下载后,我找到了它的子文件夹“features2d”并将其放入opencv_contrib-master/modules/xfeatures2d/test/。
还是报错 -
~/openCVMaster/opencv_contrib-master/modules/xfeatures2d/test/features2d/misc/java/src/cpp/features2d_converters.cpp:2:10: fatal error: common.h: No such file or directory
#include "common.h"
我添加了以下内容:
cd ~/openCVMaster/opencv_contrib-master/modules/xfeatures2d/test/features2d/misc/java/src/cpp
curl wget https://raw.githubusercontent.com/ray-project/common/master/common.h > common.h
我再次运行make,得到以下错误:
~/openCVMaster/opencv_contrib-master/modules/xfeatures2d/test/features2d/misc/java/src/cpp/features2d_converters.cpp: In function ‘void Mat_to_vector_KeyPoint(cv::Mat&, std::vector<cv::KeyPoint>&)’:
~/openCVMaster/opencv_contrib-master/modules/xfeatures2d/test/features2d/misc/java/src/cpp/features2d_converters.cpp:7:38: error: ‘LOGD’ was not declared in this scope
#define CHECK_MAT(cond) if(!(cond)){ LOGD("FAILED: " #cond); return; }
~/openCVMaster/opencv_contrib-master/modules/xfeatures2d/test/features2d/misc/java/src/cpp/features2d_converters.cpp:14:5: note: in expansion of macro ‘CHECK_MAT’
CHECK_MAT(mat.type()==CV_32FC(7) && mat.cols==1);
^~~~~~~~~
~/openCVMaster/opencv_contrib-master/modules/xfeatures2d/test/features2d/misc/java/src/cpp/features2d_converters.cpp: In function ‘void Mat_to_vector_DMatch(cv::Mat&, std::vector<cv::DMatch>&)’:
~/openCVMaster/opencv_contrib-master/modules/xfeatures2d/test/features2d/misc/java/src/cpp/features2d_converters.cpp:7:38: error: ‘LOGD’ was not declared in this scope
#define CHECK_MAT(cond) if(!(cond)){ LOGD("FAILED: " #cond); return; }
欢迎提出任何建议。
【问题讨论】:
-
您描述的所有步骤都应由 CMake 处理,包括文件下载。你必须建立java绑定吗?通过
cmake -i浏览您的 OpenCV 选项 -
@mainactual - 非常感谢您的帮助。要回答您的问题 - 我不需要 java.util.我试图删除 features2d 中名为 java 的文件夹(这引发了与新丢失文件相关的错误),并且我还使用 -D WITH_JAVA=OFF 运行了 cmake(这引发了与上述相同的错误 - features2d_converters.cpp 文件中的 void mat_to_vector )。我会尝试 cmake -i。
-
更具体地说,这是我上次尝试的实际 cmake: cmake -DBUILD_SHARED_LIBS=OFF -D BUILD_opencv_java=OFF -DCMAKE_BUILD_TYPE=Release -DOPENCV_ENABLE_NONFREE:BOOL=ON -DOPENCV_EXTRA_MODULES_PATH=//home/kate /Documents/openCVMaster/opencv_contrib-master/modules /home/kate/Documents/openCVMaster/opencv-4.3.0
-
[binary-folder]/modules/core/version_string.inc 列出了构建选项,因此您可以在此处检查或附加。不建议手动定制构建,而是让 CMake 来做。所以我会创建一个干净的文件夹,使用
cmake -i浏览所有选项,然后让 CMake 下载文件。了解选项后,使用-Ds 构建单行命令。此外,当您添加 contrib-modules 时,它们都默认启用(并且编译起来有些棘手),而您只需要 xfeatures2d。 -
我想出了我需要在 cmake-gui 中打勾的框(BUILD_opencv_core、BUILD_cv_features2d、BUILD_opencv_flann、BUILD_opencv_imgproc、[名称中包含 python 的所有内容]、ENABLE_CCACHE、OPENCV_ENABLE_NONFREE、ENABLE_PIC),现在有了完整的编译的python模块。非常感谢@mainactual - 我为此工作了大约一个月,但没有成功,即将放弃。明天我将尝试弄清楚如何让 vscode 识别我的新 opencv 模块:-)