目录
在物联网工程项目中,数据源最大的无疑就是各种摄像机捕获的图像数据,因此视觉数据处理就是物联网数据治理中一个极为重要的一环。开源的视觉处理函数库OpenCV提供的非常丰富的视觉处理算法,可以在Windows,Android,Maemo,FreeBSD,OpenBSD,iOS,Linux 和Mac OS等平台上运行。OpenCV用C++语言编写,OpenCV 拥有包括 500 多个C函数的跨平台的中、高层 API。它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python、Java and MATLAB/OCTAVE(版本2.5)的接口。其也经过适当改写可以正常的运行在DSP系统和ARM系统中。
opencv可以在官网(Courses - OpenCV)、github、gitee下载源码编译自己所需要的特定功能的库,也可以在SourceForge获得已经编译好的库直接应用。
本文介绍在win10(64bit)下载源码自行编译的情况,准备工作如下:
安装好vs2015 、cmake 、git、pyshon

创建opencv的文件目录D:\workForMy\OpenCVLib,可提前下载好opencv源码(本文在国内源码网站gitee.com下载,速度较快):
git clone git@gitee.com:mirrors/opencv.git
git clone git@gitee.com:cubone/opencv_contrib.git
在该目录下创建脚本文件install_opencv.sh
- #!/bin/bash -e
- myRepo=$(pwd)
- #按自己电脑vs版本需要设置
- CMAKE_GENERATOR_OPTIONS=-G"Visual Studio 14 2015 Win64"
- #如果在该目录下没opencv源码,先行下载
- #本文采用gitee.com的下载源,可以在该网站下搜索opencv获得地址
- if [ ! -d "$myRepo/opencv" ]; then
- echo "cloning opencv"
- git clone git@gitee.com:mirrors/opencv.git
- else
- cd opencv
- git pull --rebase
- cd ..
- fi
- #如果在该目录下没opencv_contrib源码,先行下载
- #本文采用gitee.com的下载源,可以在该网站下搜索opencv_contrib获得地址
- if [ ! -d "$myRepo/opencv_contrib" ]; then
- echo "cloning opencv_contrib"
- git clone git@gitee.com:cubone/opencv_contrib.git
- else
- cd opencv_contrib
- git pull --rebase
- cd ..
- fi
- RepoSource=opencv
- mkdir -p build_opencv
- pushd build_opencv
- CMAKE_OPTIONS=(-DBUILD_PERF_TESTS:BOOL=OFF -DBUILD_TESTS:BOOL=OFF -DBUILD_DOCS:BOOL=OFF -DWITH_CUDA:BOOL=OFF -DBUILD_EXAMPLES:BOOL=OFF -DINSTALL_CREATE_DISTRIB=ON)
- set -x
- cmake "${CMAKE_GENERATOR_OPTIONS[@]}" "${CMAKE_OPTIONS[@]}" -DOPENCV_EXTRA_MODULES_PATH="$myRepo"/opencv_contrib/modules -DCMAKE_INSTALL_PREFIX="$myRepo/install/$RepoSource" "$myRepo/$RepoSource"
- echo "************************* $Source_DIR -->debug"
- cmake --build . --config debug
- echo "************************* $Source_DIR -->release"
- cmake --build . --config release
- cmake --build . --target install --config release
- cmake --build . --target install --config debug
- popd
启动vs2015 x64命令工具,运行install_opencv.sh,编译时间会很久,挺吃CPU的,需要耐心等待。编译完成后如下:

OpenCV的动态库、命令工具输出目录,该目录需要进行win环境变量设置

库文件输出目录

在系统环境变量中设置OPENCV_DIR=D:\workForMy\OpenCVLib\install\opencv\x64\vc14,并在Path中加入%OPENCV_DIR%\bin


创建工程如下:

- test
- bin
- build_win
- src
- main.cpp
- CMakeLists.txt
main.cpp测试源码如下:
- #include
- #include
- #include
- #include
- using namespace cv;
- using namespace std;
- //加载一张图片并窗口显示
- int main( int argc, char** argv )
- {
- if( argc != 2)
- {
- cout <<" Usage: " << argv[0] << " ImageToLoadAndDisplay" << endl;
- return -1;
- }
- Mat image;
- image = imread(argv[1], IMREAD_COLOR); // Read the file
- if( image.empty() ) // Check for invalid input
- {
- cout << "Could not open or find the image" << std::endl ;
- return -1;
- }
- namedWindow( "Display window", WINDOW_AUTOSIZE ); // Create a window for display.
- imshow( "Display window", image ); // Show our image inside it.
- waitKey(0); // Wait for a keystroke in the window
- return 0;
- }
CMakeLists.txt
- # CMake 最低版本号要求
- cmake_minimum_required (VERSION 2.8)
- # 项目信息
- project (opencv_test)
- #
- message(STATUS "windows compiling...")
- add_definitions(-D_PLATFORM_IS_WINDOWS_)
- set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
- set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
- set(WIN_OS true)
-
- #
- set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
-
- # 指定源文件的目录,并将名称保存到变量
- SET(source_h
- #
- )
-
- SET(source_cpp
- #
- ${PROJECT_SOURCE_DIR}/src/main.cpp
- )
-
- #头文件目录
- include_directories(${PROJECT_SOURCE_DIR}/../opencv/include)
-
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4819")
-
- add_definitions(
- "-D_CRT_SECURE_NO_WARNINGS"
- "-D_WINSOCK_DEPRECATED_NO_WARNINGS"
- "-DNO_WARN_MBCS_MFC_DEPRECATION"
- "-DWIN32_LEAN_AND_MEAN"
- )
-
- link_directories(
- ${PROJECT_SOURCE_DIR}/../opencv/x64/vc14/bin
- ${PROJECT_SOURCE_DIR}/../opencv/x64/vc14/lib
- )
-
- if (CMAKE_BUILD_TYPE STREQUAL "Debug")
-
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/bin)
- # 指定生成目标
- add_executable(opencv_testd ${source_h} ${source_cpp})
- target_link_libraries(opencv_test opencv_world460d.lib opencv_img_hash460d.lib)
-
- else(CMAKE_BUILD_TYPE)
-
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/bin)
- # 指定生成目标
- add_executable(opencv_test ${source_h} ${source_cpp})
- target_link_libraries(opencv_test opencv_world460.lib opencv_img_hash460.lib)
-
- endif (CMAKE_BUILD_TYPE)
编译命令如下,重新启动vs2015 x64的命令工具(使前面配置的环境变量生效),进入D:\workForMy\OpenCVLib\install\test\build_win目录,编译如下:
- cd D:\workForMy\OpenCVLib\install\test\build_win
- cmake -G "Visual Studio 14 2015 Win64" -DCMAKE_BUILD_TYPE=Release ..
- msbuild opencv_test.sln /p:Configuration="Release" /p:Platform="x64"
进入程序输出目录D:\workForMy\OpenCVLib\install\test\bin,随便拷贝一张图片到该目录下,例如2.bmp,然后启动程序opencv_test.exe 2.bmp,运行效果如下:

表明编译库可用。