85

I wrote a CMakeLists.txt for a project in C++, which uses OpenCV libraries. When I try to create the project using cmake, I get the next configuration problem:

CMake Error at CMakeLists.txt:15 (find_package):
  Could not find module FindOpenCV.cmake or a configuration file for package
  OpenCV.

  Adjust CMAKE_MODULE_PATH to find FindOpenCV.cmake or set OpenCV_DIR to the
  directory containing a CMake configuration file for OpenCV.  The file will
  have one of the following names:

    OpenCVConfig.cmake
    opencv-config.cmake

The fact is that I have an environment variable for the path which I use in Visual Studio with no problems. If I don't include OpenCV, then I can configure and generate with no problem, but I need to solve the problem. I don't understand why cmake cannot find the OpenCV path or how to fix it.

I also used the recommendations mentioned in this link: FindOpenCV.cmake

Does anybody had this problem too?

14 Answers 14

42

The error you're seeing is that CMake cannot find a FindOpenCV.cmake file, because cmake doesn't include one out of the box. Therefore you need to find one and put it where cmake can find it:

You can find a good start here. If you're feeling adventurous you can also write your own.

Then add it somewhere in your project and adjust CMAKE_MODULE_PATH so that cmake can find it.

e.g., if you have

CMakeLists.txt
cmake-modules/FindOpenCV.cmake

Then you should do a

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules)

In your CMakeLists.txt file before you do a find_package(OpenCV)

Sign up to request clarification or add additional context in comments.

12 Comments

Thanks, but I have tried all of this. I read forums ffrom people with similar problems and they suggested to set the paths. I downloaded the FindOpenCV, I defined the variables with the paths, I moved the OpenCV folder to different paths, I directly linked the opencvConfig.cmake, but the error is always the same. cmake cannot find my opencv folder! At least now I understand cmake language, xD.
Ok so cmake is actually using FindOpenCV.cmake? Now its having trouble finding OpenCV library/headers?
No, just cannot find the OpenCV_DIR, even if I manually write it, even if I set a variable inside the cmakelists.
CMake is actually using FindOpenCV.cmake. Problem 1 solved. Have you tried setting it manually using a command line option like cmake -DOpenCV_DIR=/path/to/opencv ? Another option is to set this using ccmake or cmake-gui.
Try to define CMAKE_PREFIX_PATH variable and set it to the dir, where OpenCV is installed.
|
31

If you are on Linux, you just need to fill the OpenCV_DIR variable with the path of opencv (containing the OpenCVConfig.cmake file)

export OpenCV_DIR=<path_of_opencv>

3 Comments

Should be export OpenCV_DIR=<path_of_opencv/build>
On Windows for PowerShell $env:OpenCV_DIR = "C:\path_of_opencv\build"
On Linux, not need. Just install libopencv-dev it will fill the gaps.
24
  1. apt-get install libopencv-dev
  2. export OpenCV_DIR=/usr/share/OpenCV
  3. the header of cpp file should contain:
#include <opencv2/opencv.hpp>
#include "opencv2/highgui/highgui.hpp"

#include <cstdio>
#include <iostream>

not original cv.h

3 Comments

only 1st step needed on my side: apt-get install libopencv-dev
On my side, the path was /usr/lib/x86_64-linux-gnu/cmake/opencv4
@RemyMellet your solution fixed my problem, thank you
21
find / -name "OpenCVConfig.cmake"

export OpenCV_DIR=/path/found/above

2 Comments

please provide some explanation with your answer
find / -name "OpenCVConfig.cmake" searches your file system for that file. export OpenCV_DIR=/path/found/above lets CMake know where that file is located.
17

I had this exact same problem. I fixed it by adding the following line to my FindOpenCV.cmake file. Put it anywhere at the top before the rest of the code.

set (OpenCV_DIR /home/cmake/opencv/compiled) #change the path to match your complied directory of opencv

Basically you are telling FindOpenCV.cmake where to find opencv files assuming the other compilation can find the FindOpenCV.cmake

2 Comments

This worked for me. I set the path of OPENCV_DIR to that of the opencv build folder
<Pkg>_DIR variables are designed to be set by the user at the command line. Even more importantly, you should never put absolute paths to your home folder (of all places!) in your CMakeLists.txt!!
6

I faced the same error. In my case this "OpenCVConfig.cmake" file is located in /usr/local/share/OpenCV. In CMakeLists.txt add the line

set(OpenCV_DIR /usr/local/share/OpenCV)

as suggested by the error message.

2 Comments

I had installed opencv in a new location /usr/local/opencv-3.3.0. I used set(OpenCV_DIR /usr/local/opencv-3.3.0/share/OpenCV). I didnt have to set CMAKE_MODULE_PATH. CMakeLists.txt :project( opencv_detect_version ) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") cmake_minimum_required(VERSION 2.8) set(OpenCV_DIR /usr/local/opencv-3.3.0/share/OpenCV) find_package( OpenCV CONFIG REQUIRED ) add_executable( opencv_detect_version opencv_detect_version.cpp ) target_link_libraries( opencv_detect_version ${OpenCV_LIBS} )
on Ubuntu: ls: cannot access '/usr/local/share/OpenCV': No such file or directory
3

Another possibility is to denote where you can find OpenCV_DIR in the CMakeLists.txt file. For example, the following cmake scripts work for me:

cmake_minimum_required(VERSION 2.8)

project(performance_test)

set(OpenCV_STATIC ON)
set(OpenCV_CUDA OFF)
set(OpenCV_DIR "${CMAKE_SOURCE_DIR}/../install")

find_package(OpenCV REQUIRED)

include_directories(${OpenCV_INCLUDE_DIRS})

link_directories(${OpenCV_LIB_DIR})

file(GLOB my_source_files ./src/*)

add_executable( performance_test ${my_source_files})

target_link_libraries(performance_test ${OpenCV_LIBS})

Just to remind that you should set OpenCV_STATIC and OpenCV_CUDA as well before you invoke OpenCVConfig.cmake. In my case the built library is static library that does not use CUDA.

Comments

3

if you are on windows, you can add opencv path to OpenCV_DIR yourself. (OpenCV_DIR is in the red region)

the path is like "D:/opencv244/build".

you can find file "OpenCVConfig.cmake" under the path.

3 Comments

On windows make SURE to use "/" instead of the normal slash!
Setting OPENCV_DIR=C:/opencv/build/ doesn't fix a problem for me on Windows, even though I have C:\opencv\build\OpenCVConfig.cmake...
This works for me. No need for OpenCVConfig.cmake, just set OpenCV_DIR to C:/OpenCVx.y.z/**Build**
2

For me (on Ubuntu), I just run:

sudo apt-get install libopencv-dev

Comments

1

On my Fedora machine, when I typed "make" I got an error saying it could not find "cv.h". I fixed this by modifying my "OpenCVConfig.cmake" file.

Before:

SET(OpenCV_INCLUDE_DIRS "${OpenCV_INSTALL_PATH}/include/opencv;${OpenCV_INSTALL_PATH}/include")

SET(OpenCV_LIB_DIR "${OpenCV_INSTALL_PATH}/lib64")

After:

SET(OpenCV_INCLUDE_DIRS "/usr/include/opencv;/usr/include/opencv2")

SET(OpenCV_LIB_DIR "/usr/lib64")

Comments

1

I am using Windows and get the same error message. I find another problem which is relevant. I defined OpenCV_DIR in my path at the end of the line. However when I typed "path" in the command line, my OpenCV_DIR was not shown. I found because Windows probably has a limit on how long the path can be, it cut my OpenCV_DIR to be only part of what I defined. So I removed some other part of the path, now it works.

Comments

1

I had the same error, I use windows. I add "C:\opencv\build" (opencv folder) to path at the control pannel. So, That's Ok!!

Comments

-1

Followed @hugh-pearse 's and @leszek-hanusz 's answers, with a little tweak. I had installed opencv from ubuntu 12.10 repository (libopencv-)* and had the same problem. Couldn't solve it with export OpenCV_DIR=/usr/share/OpenCV/ (since my OpenCVConfig.cmake whas there). It was solved when I also changed some lines on the OpenCVConfig.cmake file:

# ======================================================
# Include directories to add to the user project:
# ======================================================

# Provide the include directories to the caller

#SET(OpenCV_INCLUDE_DIRS "${OpenCV_INSTALL_PATH}/include/opencv;${OpenCV_INSTALL_PATH}/include")

SET(OpenCV_INCLUDE_DIRS "/usr/include/opencv;/usr/include/opencv2")
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})

# ======================================================
# Link directories to add to the user project:
# ======================================================

# Provide the libs directory anyway, it may be needed in some cases.

#SET(OpenCV_LIB_DIR "${OpenCV_INSTALL_PATH}/lib")

SET(OpenCV_LIB_DIR "/usr/lib")

LINK_DIRECTORIES(${OpenCV_LIB_DIR})

And that worked on my Ubuntu 12.10. Remember to add the target_link_libraries(yourprojectname ${OpenCV_LIBS}) in your CMakeLists.txt.

Comments

-2

When you install the libraries in the c drive (windows). the CMakeLists.txt shoud be looking like below:

cmake_minimum_required(VERSION 3.0.0)
project(test_opencv VERSION 0.1.0)

include(CTest)
enable_testing()

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

add_executable(test_opencv main.cpp)

target_link_libraries(test_opencv ${OPENCV_LIBS})

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

finding the package and include directories

when building the project in VS code. Run the visual studio code with admin rights as the OpenCV is installed inside C drive.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.