opencv3.0.0编程遇到的问题
一、代码
一个最简单的DisplayImage.cpp,代码为:
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv )
{
//if ( argc != 2 )
// {
// printf("usage: DisplayImage.out <Image_Path>\n");
// return -1;
// }
Mat image;
image = imread("time_1970_186.jpg", 1 );
if ( !image.data )
{
printf("No image data \n");
return -1;
}
namedWindow("Display Image", WINDOW_AUTOSIZE );
imshow("Display Image", image);
waitKey(0);
return 0;
}
CMakeLists.txt为:
cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
二、问题
1、
执行cmake .,报错:
[zzz@localhost testopencv]$ cmake .
CMake Error at CMakeLists.txt:3 (find_package):
By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "OpenCV", but
CMake did not find one.
Could not find a package configuration file provided by "OpenCV" with any
of the following names:
OpenCVConfig.cmake
opencv-config.cmake
Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH or set
"OpenCV_DIR" to a directory containing one of the above files. If "OpenCV"
provides a separate development package or SDK, be sure it has been
installed.
-- Configuring incomplete, errors occurred!
由于我安装的时候,是在opencv-3.0.0目录下建立了一个release,在这里进行安装的,安装的目标路径为:opencv-3.0.0目录下新建的的build目录。
[root@localhost release]# cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=../build/ ..
...
[root@localhost release]# ll
total 416
drwxr-xr-x. 10 root root 4096 Dec 25 11:53 3rdparty
drwxr-xr-x. 6 root root 4096 Dec 25 11:53 apps
drwxr-xr-x. 2 root root 4096 Dec 25 11:59 bin
-rw-r--r--. 1 root root 170052 Dec 25 11:53 CMakeCache.txt
drwxr-xr-x. 10 root root 4096 Dec 25 12:00 CMakeFiles
-rw-r--r--. 1 root root 6200 Dec 25 11:53 cmake_install.cmake
-rw-r--r--. 1 root root 1182 Dec 25 11:53 cmake_uninstall.cmake
-rw-r--r--. 1 root root 6105 Dec 25 11:53 CPackConfig.cmake
-rw-r--r--. 1 root root 6451 Dec 25 11:53 CPackSourceConfig.cmake
-rw-r--r--. 1 root root 3715 Dec 25 11:53 cvconfig.h
drwxr-xr-x. 3 root root 4096 Dec 25 11:53 data
drwxr-xr-x. 3 root root 4096 Dec 25 11:53 doc
drwxr-xr-x. 3 root root 4096 Dec 25 11:53 include
-rw-r--r--. 1 root root 20536 Dec 25 12:00 install_manifest.txt
drwxr-xr-x. 2 root root 4096 Dec 25 11:52 junk
drwxr-xr-x. 2 root root 4096 Dec 25 11:59 lib
-rw-r--r--. 1 root root 100547 Dec 25 11:53 Makefile
drwxr-xr-x. 37 root root 4096 Dec 25 11:53 modules
drwxr-xr-x. 2 root root 4096 Dec 25 11:53 opencv2
-rw-r--r--. 1 root root 16636 Dec 25 11:53 OpenCVConfig.cmake
-rw-r--r--. 1 root root 376 Dec 25 11:53 OpenCVConfig-version.cmake
-rw-r--r--. 1 root root 11691 Dec 25 11:53 OpenCVModules.cmake
drwxr-xr-x. 2 root root 4096 Dec 25 11:53 unix-install
-rw-r--r--. 1 root root 6788 Dec 25 11:53 version_string.tmp
[root@localhost release]#
..
[root@localhost release]# ll ../build/
total 16
drwxr-xr-x. 2 root root 4096 Dec 25 12:00 bin
drwxr-xr-x. 4 root root 4096 Dec 25 12:00 include
drwxr-xr-x. 3 root root 4096 Dec 25 12:00 lib
drwxr-xr-x. 3 root root 4096 Dec 25 12:00 share
可以看到:报错所说的两个文件:
OpenCVConfig.cmake
opencv-config.cmake
其中的一个就在我执行安装的路径release下,所以,我需要指定这个路径。修改CMakeLists.txt为:
[zzz@localhost testopencv]$ cat CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
set(OpenCV_DIR /home/zzz/software/opencv-3.0.0/release)
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
[zzz@localhost testopencv]$ cmake .
-- Configuring done
-- Generating done
-- Build files have been written to: /home/zzz/test/testopencv
2、找不到头文件
[zzz@localhost testopencv]$ make
Scanning dependencies of target DisplayImage
[100%] Building CXX object CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o
/home/zzz/test/testopencv/DisplayImage.cpp:3:30: fatal error: opencv2/opencv.hpp: No such file or directory
#include <opencv2/opencv.hpp>
^
compilation terminated.
make[2]: *** [CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o] Error 1
make[1]: *** [CMakeFiles/DisplayImage.dir/all] Error 2
make: *** [all] Error 2
[zzz@localhost testopencv]$
原因同上,没有安装到系统路径下,这时候通过指示cmake需要包含指定的目录即可:
include_directories
[gumh@localhost testopencv]$ cat CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
set(OpenCV_DIR /home/zzz/software/opencv-3.0.0/release)
include_directories(/home/zzz/software/opencv-3.0.0/build/include)
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
cmake的一些用法参考:
http://www.cppblog.com/skyscribe/archive/2009/12/14/103208.html