opencv - 如何用 cmake 编译 OpenCV?
问题描述
我正在尝试编译 OpenCV 以使其具有 sift 模块。
我使用本教程下载了 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.
我按照在这里找到的建议,并添加了以下文件:
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
按照 ah-ma 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; }
欢迎任何建议。
解决方案
- 下载
opencv-4.3.0.zip
并opencv_contrib-4.3.0.zip.
解压缩它们。 - 打开
opencv_contrib-4.3.0\modules.
复制显示的文件夹xfeatures2d
。打开opencv-4.3.0\modules
并粘贴刚刚复制的文件夹 (xfeatures2d
) - 创建一个空文件夹,并将其命名为“Build45”。
- 打开 cmake-gui。
- 在显示“在哪里构建二进制文件”的框中,放置代表您的空文件夹的文件路径 (
Build45
) - 在显示“源代码在哪里”的框中,放置代表的文件路径
opencv-4.3.0.
- 单击
configure.
选项将出现。 - 在搜索框中输入“免费”并选中显示 OPENCV_ENABLE_NONFREE 的框。
- 输入
xfeatures2d
并选中“Build_opencv_xfeatures2d”框 - 再次单击
configure
。(仔细检查您是否正确:cmake gui 中有第二个框提供构建详细信息。您应该看到Non-free algorithms: YES
. - 单击
Generate
。 - 检查 build45 文件夹现在是否充满了东西。
- 打开终端并导航到 build45 文件夹 (
cd ~/opencv-master/build45
) - 类型
cmake .
- 类型
make
- 注意:* 编译需要几个小时。给自己泡杯茶*。
- 类型
sudo make install
- 检查它是否有效:在您的终端中,键入
python3
- 类型
import cv2
- 类型
sift = cv2.xfeatures2d.SIFT_create()
- 你应该没有错误。如果您确实遇到错误,以下故障排除工具可能会有所帮助:
import cv2
print cv2.getBuildInformation()
import cv2
funcs = dir(cv2)
for f in funcs:
... print(f)
此外,如果您担心侵犯专利,请在此处查看讨论:https ://www.reddit.com/r/computervision/comments/ba1l8g/according_to_this_the_patent_on_sift_was_due_to/
推荐阅读
- c# - 在所有轴上旋转模型
- python - 从原点开始 x 轴刻度
- java - java - 如何在java中将十六进制反转为反转十六进制?
- python-3.x - Python在文本文件中搜索模式的有效方法
- google-chrome - 对于运行 Windows 7 的计算机,Chrome 上的 SSL 问题 NET::ERR_CERT_DATE_INVALID
- vulkan - 为什么 Vulkan 中的栅栏状态检查和重置如此缓慢?
- reactjs - Apollo 客户端重新获取非活动查询
- html - 为什么 css 中的 background-image 属性不起作用?
- php - 通过使用 php 比较 id 从另一个表中获取数据
- javascript - 如果它们是嵌套的,则无法设置 formik 错误