Ubuntu OpenCV没有编译

时间:2017-03-28 22:23:26

标签: c++ opencv ubuntu

我尝试使用以下命令编写OpenCV 3.2:

1.
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/usr/local/ -DOPENCV_EXTRA_MODULES_PATH=/home/matteo/Desktop/Xilinx/OpenCV/source/opencv_contrib/modules/ /home/matteo/Desktop/Xilinx/OpenCV/source/opencv-3.2.0/
2.
make -j7 # runs 7 jobs in parallel
3.
sudo make install

你能解释我为什么

...
........
...........
........................
-- VTK is not found. Please set -DVTK_DIR in CMake to VTK build directory, or to VTK install subdirectory with VTKConfig.cmake file
-- Caffe:   NO
-- Protobuf:   NO
-- Glog:   NO
-- Downloading ...
CMake Error at cmake/OpenCVUtils.cmake:1043 (file):
  file DOWNLOAD cannot open file for write.
Call Stack (most recent call first):
  ../opencv_contrib/modules/dnn/cmake/OpenCVFindLibProtobuf.cmake:32 (ocv_download)
  ../opencv_contrib/modules/dnn/CMakeLists.txt:5 (include)


CMake Error at cmake/OpenCVUtils.cmake:1047 (message):
  Failed to download .  Status=
Call Stack (most recent call first):
  ../opencv_contrib/modules/dnn/cmake/OpenCVFindLibProtobuf.cmake:32 (ocv_download)
  ../opencv_contrib/modules/dnn/CMakeLists.txt:5 (include)


-- Configuring incomplete, errors occurred!

我正在使用Ubuntu 16.04。我已经在系统上安装了OpenCV:也许我以错误的方式取消它?我记得用上面使用的相同命令编译OpenCV 3.2。

5 个答案:

答案 0 :(得分:8)

您必须拥有opencv_contrib和opencv本身的匹配版本。

在opencv github下,转到OpenCV releases并下载3.2.0(它应该在master分支中相同)。

现在,转到https://github.com/opencv/opencv_contrib/releases并下载3.2.0。然后你将有两个版本匹配。

之后,在opencv_contrib主分支的README.md上找到的所有cmake命令都可以正常工作。

答案 1 :(得分:6)

我在protobuf周围得到了同样的错误,那个确切的错误。如果你删除了dnn模块,那么xfeatures2d模块上还会出现另一个错误(因此它们没有配置/构建)。我的问题是,我需要“非自由”的xfeatures2d模块。 :(

问题似乎出现在opencv_contrib,DNN和xfeatures2d模块中,但我不知道如何修复它。即使dnn和xfeatures2d cmake文件传入参数,对ocv_download 的调用似乎也有空输入。我甚至不是cmake的新手,所以我不确定如何进一步排除故障。

我使用最新版本的cmake-gui,3.8.0-rc3在Mac配置XCode和Windows配置Visual Studio时出现此错误。

编辑:我想我已经找到了这个问题。我开了一个issue in the opencv_contrib github。在使用FILENAME作为第一个参数的dnn和xfeatures2d cmake文件中调用了ocv_download,但应该使用PACKAGE。当我将参数更改为PACKAGE时,CMake使用opencv_contrib模块成功配置了opencv。

希望这有帮助! :)

答案 2 :(得分:5)

您可能不会使用相同版本的opencv和opencv_contrib

https://github.com/opencv/opencv_contrib/archive/ <version>的.zip https://github.com/opencv/opencv/archive/ <version>的.zip

master3.2.0

答案 3 :(得分:3)

<强> SHORT

您需要在opencv和opencv_contrib中拥有相同的版本(... / opencv_contrib / modules / ...属于独立的仓库)。

BOTH存储库中的相同版本或最后一次提交。

检查您拥有的版本并移动另一个版本。在您的情况下,我猜您必须更改opencv_contrib的版本,然后使用git或download it from github移至该版本。

git checkout <number_opencv_version i.e. 3.2.0>

<强> LONG

我想作为Ken Lee,您在存储库中没有相同的版本。

正如opened issue中引用的Matt,调用ocv_download时出现问题,因为版本不是opencv-3.1时使用的版本,因此它失败,因为参数不是预期的参数。

当我使用opencv 3.1.0和opencv_contrib的最新版本时,它发生在我身上。您可以逐个更改cmake文件,但在每个仓库中更容易获取正确的版本。

答案 4 :(得分:0)

您的构建文件夹中存在正确的冲突(可能来自您之前的sudo make install)。我不记得我是如何修复它的,但你可以递归chown来源和构建文件夹(或chmod到777)。