好久没有倒腾 opencv,发现opencv都4.2 版本了,今天编译发现其实cmake命令和3.×的差不多。
可以看看我以前倒腾的一个编译步骤。
我的opencv 和 opencv_contrib 都是克隆下来的,master目前的版本是4.3不稳定版本,所以建议checkout到4.2
# 在opencv下:
git checkout 4.2.0
# 在opencv_contrib下,版本一定要和opencv版本对应,否则会报错
git checkout 4.2.0
这次遇到的一个最大的问题,不是编译,而是一些文件的下载。在没有梯子的情况下,30k的小水管倒腾了一天,我下载好了,供大家使用。
这个包下载下来,还不能直接起到作用,要使用起来,还需要拷贝到对应的目录里面,我这里写了一个python脚本,供大家参考:
import os
import shutil
# 下面三个变量根据自己实际情况修改
package_path = './opencv_down_data' # 我整理的包,大家可以在我分享的百度云盘或者csdn下载。
src_dir = '~/workspace/source_got/opencv/opencv-20200316/' # 是源代码目录
build_dir = os.path.join(src_dir, 'build/') # cmake 的编译目录
# 这个是opencv cmake 自创的一个缓存目录
catch_dir = os.path.join(src_dir, '.cache/')
# 下面是路径结构
# 前者文件名和下载名一样,是编译目录下的目录结构
# 后者文件名加上了hash校验值,是缓存目录下的目录结构
dir_paths = [#['3rdparty/ippicv/ippicv_2020_lnx_intel64_20191018_general.tgz',
#'ippicv/7421de0095c7a39162ae13a6098782f9-ippicv_2020_lnx_intel64_20191018_general.tgz'], # 做到master分支上,导致资源是编译4.3的了
['3rdparty/ippicv/ippicv_2019_lnx_intel64_general_20180723.tgz',
'ippicv/c0bd78adb4156bbf552c1dfe90599607-ippicv_2019_lnx_intel64_general_20180723.tgz'],#这个是4.2的资料
['3rdparty/ade/v0.1.1f.zip',
'ade/b624b995ec9c439cbc2e9e6ee940d3a2-v0.1.1f.zip'],
['downloads/xfeatures2d/boostdesc_bgm.i',
'xfeatures2d/boostdesc/0ea90e7a8f3f7876d450e4149c97c74f-boostdesc_bgm.i'],
['downloads/xfeatures2d/boostdesc_bgm_bi.i',
'xfeatures2d/boostdesc/232c966b13651bd0e46a1497b0852191-boostdesc_bgm_bi.i'],
['downloads/xfeatures2d/boostdesc_bgm_hd.i',
'xfeatures2d/boostdesc/324426a24fa56ad9c5b8e3e0b3e5303e-boostdesc_bgm_hd.i'],
['downloads/xfeatures2d/boostdesc_binboost_064.i',
'xfeatures2d/boostdesc/202e1b3e9fec871b04da31f7f016679f-boostdesc_binboost_064.i'],
['downloads/xfeatures2d/boostdesc_binboost_128.i',
'xfeatures2d/boostdesc/98ea99d399965c03d555cef3ea502a0b-boostdesc_binboost_128.i'],
['downloads/xfeatures2d/boostdesc_binboost_256.i',
'xfeatures2d/boostdesc/e6dcfa9f647779eb1ce446a8d759b6ea-boostdesc_binboost_256.i'],
['downloads/xfeatures2d/boostdesc_lbgm.i',
'xfeatures2d/boostdesc/0ae0675534aa318d9668f2a179c2a052-boostdesc_lbgm.i'],
['downloads/xfeatures2d/vgg_generated_48.i',
'xfeatures2d/vgg/e8d0dcd54d1bcfdc29203d011a797179-vgg_generated_48.i'],
['downloads/xfeatures2d/vgg_generated_64.i',
'xfeatures2d/vgg/7126a5d9a8884ebca5aea5d63d677225-vgg_generated_64.i'],
['downloads/xfeatures2d/vgg_generated_80.i',
'xfeatures2d/vgg/7cd47228edec52b6d82f46511af325c5-vgg_generated_80.i'],
['downloads/xfeatures2d/vgg_generated_120.i',
'xfeatures2d/vgg/151805e03568c9f490a5e3a872777b75-vgg_generated_120.i'],
['share/opencv4/testdata/cv/face//face_landmark_model.dat',
'data/7505c44ca4eb54b4ab1e4777cb96ac05-face_landmark_model.dat' ]]
# 如果还没有编译过,可能有的目录不存在
# 检查一下,没有创建一个
def chmk_parent_dir(p):
t = os.path.dirname(p)
if not os.path.exists(t):
os.makedirs(t)
# 拷贝部分
for de in dir_paths:
file_p = os.path.join(package_path, os.path.basename(de[0]))
bin_p = os.path.join(build_dir, de[0])
chmk_parent_dir(bin_p)
shutil.copy(file_p, bin_p)
catch_p = os.path.join(catch_dir, de[1])
chmk_parent_dir(catch_p)
shutil.copy(file_p, catch_p)
# 安装的时候遇到的坑,我怀疑这个ippicv是不是亲生的
# 这里需要自己解压 ippicv_2020_lnx_intel64_20191018_general
def cd_path(p):
if os.path.exists(p):
os.chdir(os.path.dirname(p)) if os.path.isfile(p) else os.chdir(p)
return True
else:
print("dir not exists: %s" % (p))
return False
ippicv = os.path.join(build_dir, package_path[0][0])
if cd_path(ippicv):
os.system('tar xf %s' % (ippicv))
根据上面脚本,可以将文件拷贝到对应目录,骗过cmake到网上去下载程序包。
然后就cmake, 命令里面的路径根据自己的环境进行修改,这个是参考以前的文档修改的,当时没有做记录,大家将就看,也可以在官网文档上参考:
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-20200316/modules \
-D PYTHON_DEFAULT_EXECUTABLE=~/anaconda3/bin/python3 \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_QT=OFF \
-D BUILD_opencv_python3=ON \
-D BUILD_opencv_python2=OFF \
-D PYTHON3_EXECUTABLE=~/anaconda3/bin/python3 \
-D PYTHON3_INCLUDE_DIR=~/anaconda3/include/python3.7m \
-D PYTHON3_LIBRARY=~/anaconda3/lib/libpython3.7m.so \
-D PYTHON3_PACKAGES_PATH=~/anaconda3/lib/python3.7/site-packages \
-D PYTHON3_NUMPY_INCLUDE_DIRS=~/anaconda3/lib/python3.7/site-packages/numpy/core/include/ \
-D PYTHON_NUMPY_PATH=~/anaconda3/lib/python3.7/site-packages \
-D WITH_GTK=ON \
-D WITH_OPENGL=ON \
-D WITH_CUDA=OFF \
-D BUILD_EXAMPLES=ON \
-D HDF5_hdf5_LIBRARY=/usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5.so ..
然后make一下就好了
make -j8
其他问题:
如果 opencv 和 opencv_contrib 的版本没有对上,报错了:
Scanning dependencies of target example_tutorial_optical_flow_dense
/home/lhpc04/workspace2/source_got/opencv/opencv-20200316/samples/cpp/stitching_detailed.cpp: In function ‘int main(int, char**)’:
/home/lhpc04/workspace2/source_got/opencv/opencv-20200316/samples/cpp/stitching_detailed.cpp:434:31: error: ‘cv::xfeatures2d::SIFT’ has not been declared
finder = xfeatures2d::SIFT::create();
问题不大,记得 使用对应版本。
嗯,完成!