opencv + contrib windows下源码编译

网上,包括书上有很多人云亦云的源码编译方式,不能说不正确但是有很多弯弯绕绕(坑)。最近刚做完了一个识别项目的第一个版本,总结了一下.。为了写这篇文章,特意重新在自己电脑搭了一遍开发环境。
最权威的方式是官方文档介绍

以windows下开发为例子,我们编译一个opencv + contrib 满血lib。

编译

  1. vs,c++环境。

  2. cmake-gui,其实只要 cmake (version >=3.9.1) 装一个gui主要是方便以后做裁剪编译。
    下载地址
    安装时选择自动加入path路径,不然你要手动添加一下。

  3. 安装git ,版本大于等于2.14.1
    主要是git bash,一般我是让idea自动安装的。

以上是主要的,次要的你可以还要安装python3(带二进制调试),jdk等。

  1. 给一个目录安装,建一个installOCV.sh的文件,写入
#!/bin/bash -e
myRepo=$(pwd)
CMAKE_GENERATOR_OPTIONS=-G"Visual Studio 17 2022"
#CMAKE_GENERATOR_OPTIONS=-G"Visual Studio 16 2019"
#CMAKE_GENERATOR_OPTIONS=-G"Visual Studio 15 2017 Win64"
#CMAKE_GENERATOR_OPTIONS=(-G"Visual Studio 16 2019" -A x64)  # CMake 3.14+ is required
if [  ! -d "$myRepo/opencv"  ]; then
    echo "cloning opencv"
    git clone https://github.com/opencv/opencv.git
else
    cd opencv
    git pull --rebase
    cd ..
fi
if [  ! -d "$myRepo/opencv_contrib"  ]; then
    echo "cloning opencv_contrib"
    git clone https://github.com/opencv/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

因为脚本有下载,所以最好在环境变量配置一下
key =http_proxy value=http://127.0.0.1:1080
key =https_proxy value=http://127.0.0.1:1080

  1. 双击执行sh
    官网建议:Drink a coffee or two… opencv is ready : That’s all!
    个人经验,2杯咖啡是不够,也有可能是我电脑不好!
    完成后在目录下生成一个 install文件

使用

设置环境变量
XXXX\install\opencv\x64\vc17\bin
XXXX\install\opencv\x64\vc17\lib
重启刷新环境变量
新建一个工程,CMakeLists.txt,类似这样

project(cnn)
set(OpenCV_DIR "XXXX/install/opencv")
find_package(OpenCV REQUIRED)
if(Opencv_FOUND)
    message(STATUS "The Opecv lib is found!")
endif()
add_executable(cnn main.cpp pca.cpp pca.h)
target_link_libraries(cnn ${OpenCV_LIBS})

测试一下,我们引入人脸模块看会不会报错

#include 
#include "opencv2/opencv.hpp"
#include "opencv2/face.hpp"

using namespace std;
using namespace cv;
using namespace face;
int main() {
    std::cout<< "loading" <<std::endl;
    Mat foo = imread("IMG_2746.jpg");
    imshow("foo",foo);
    //用face模块的训练引擎,测试一下contrib 
    Ptr<BasicFaceRecognizer> model = EigenFaceRecognizer::create();
    std::cout<< cv::getBuildInformation() <<std::endl;
    waitKey(0);
    return 0;
}

附android sdk的简单使用

最简单就是找好心人编译好打包好的aar,github应该有。

官方原版的,其实也是不要又是拷贝so,又是引入include的。
具体可以看官方OpenCV-android-sdk\sdk 目录下build.gradle上面的注释。
简单说就是sdk这个文件夹可以作为android 模块加入工程。然后,要用的时候在CMakeList中这样:

find_package(OpenCV 4.5 REQUIRED java)

跟上面一样的用法,因为gradle多了一种选择,可以把opencvDir设置在gradle里。

更简单就是我在用的,弄一个私人nexus,用什么导什么,新项目把自己的module组装一下。

至于,NDK 裁剪+编译,什么时候有空再讲!

你可能感兴趣的:(opencv,opencv)