如何使用cmake编译OpenCV?
我正在尝试编译OpenCV,以便它具有sift模块 我使用下载了CMake 我还下载并解压缩了opencv-4.3.0和opencv_contrib 我创建了一个空文件夹,打开终端,并使用以下行导航到它:如何使用cmake编译OpenCV?,opencv,cmake,Opencv,Cmake,我正在尝试编译OpenCV,以便它具有sift模块 我使用下载了CMake 我还下载并解压缩了opencv-4.3.0和opencv_contrib 我创建了一个空文件夹,打开终端,并使用以下行导航到它: cd ~/opencvMaster/build 然后,当我在终端的这个空文件夹中时,我运行了以下行: cmake -DOPENCV_ENABLE_NONFREE:BOOL=ON -DOPENCV_EXTRA_MODULES_PATH= ~/openCVMaster/opencv_contri
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\u contrib-master/modules/xfeatures2d/test/test\u features2d.cpp:51:10:致命错误:features2d/test/test\u detectors\u returnal.impl.hpp:没有这样的文件或目录
按照阿玛的建议)我下载了https://github.com/opencv/opencv/tree/master/modules
。下载后,我找到了它的子文件夹“features2d”,并将其放入opencv\u 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; }
~/openCVMaster/opencv_contrib-master/modules/xfeatures2d/test/features2d/misc/java/src/cpp/features2d_converters.cpp:在函数“void Mat_to_vector_KeyPoint(cv::Mat&,std::vector&)”中:
~/openCVMaster/opencv_contrib-master/modules/xfeatures2d/test/features2d/misc/java/src/cpp/features2d_转换器。cpp:7:38:错误:“LOGD”未在此范围内声明
#定义CHECK#MAT(cond)if(!(cond)){LOGD(“FAILED:#cond);return;}
~/openCVMaster/opencv\u contrib-master/modules/xfeatures2d/test/features2d/misc/java/src/cpp/features2d\u转换器。cpp:14:5:注意:在宏“CHECK\u MAT”的展开中
检查材料(材料类型()=CV_32FC(7)和材料类别==1);
^~~~~~~~~
~/openCVMaster/opencv_contrib-master/modules/xfeatures2d/test/features2d/misc/java/src/cpp/features2d_converters.cpp:在函数“void Mat_to_vector_DMatch(cv::Mat&,std::vector&)”中:
~/openCVMaster/opencv_contrib-master/modules/xfeatures2d/test/features2d/misc/java/src/cpp/features2d_转换器。cpp:7:38:错误:“LOGD”未在此范围内声明
#定义CHECK#MAT(cond)if(!(cond)){LOGD(“FAILED:#cond);return;}
欢迎任何建议。- 下载
和opencv-4.3.0.zip
解压李>opencv\u contrib-4.3.0.zip.
- 打开
复制显示opencv\u contrib-4.3.0\modules。
的文件夹。打开xfeatures2d
,然后粘贴刚刚复制的文件夹(opencv-4.3.0\modules
)xfeatures2d
- 创建一个空文件夹,并将其命名为“Build45”
- 打开cmakegui李>
- 在显示“在何处生成二进制文件”的框中,放置表示空文件夹的文件路径(
)Build45
- 在写有“源代码在哪里”的框中,放入表示
opencv-4.3.0的文件路径。
- 单击配置。选项将出现
- 在搜索框中输入“free”,并选中显示OPENCV_ENABLE_NONFREE的框
- 输入
并选中显示“Build\u opencv\u xfeatures2d”的框`xfeatures2d
- 再次单击
。(仔细检查是否正确:cmake gui中还有第二个框提供构建详细信息。您应该看到configure
非自由算法:YES
- 单击
生成
- 检查build45文件夹是否已填充内容
- 打开终端并导航到build45文件夹(
)cd~/opencv master/build45
- 键入
cmake.
- 键入
make
- 注意:*编译需要几个小时。请自己泡杯茶*
- 键入
sudo make安装
- 检查它是否工作:在终端中,键入
python3
- 类型
导入cv2
- 键入
sift=cv2.xfeature2d.sift\u create()
- 您不应出现错误。如果确实出现错误,以下故障排除工具可能会有所帮助:
import cv2
print cv2.getBuildInformation()
import cv2
funcs = dir(cv2)
for f in funcs:
... print(f)
# Step 1: Install VS 2017 for cmake
# Step 2: Install CMake
# step 3: install Anaconda
# step 4: Download and extract opencv-3.3.1 and opencv_contrib-3.3.1
Go to https://github.com/opencv/opencv/releases and download opencv-3.3.1 source code zip
cmake.exe --build . --config Release --target INSTALL
cmake.exe --build . --config Debug --target INSTALL