CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法

opencv是很常用的图像处理库。但是随着版本的更新, opencv3 将许多认为不稳定或存在版权的函数源码都包含在了contribute模块中没有作为编译好的库文件发布出来。为了使用这些函数,我们需要将opencv的源码再次编译成包含contribute模块的库文件。
在科研工作中,使用matlab图像处理工具包 + opencv 可以实现功能上相互补足的作用。如果利用 mexopencv 可以使我们在 MATLAB 中方便的使用 opencv 的库函数,在这里汇总了一些实现 MATLAB + opencv + contribute 的资源链接。并在windows7环境中,以 Matlab R2017b + OpenCV3.4.1(含contribute模块) + vs2013 作为实际演示例子。
所需软件: Visual Studio 2013;Matlab R2017 ; OpenCV3.4.1 ; OpenCV_contrib;mexopencv;CMake
相关链接:
中文博客:https://blog.csdn.net/sunzwdds/article/details/71080355?utm_source=blogxgwz0&tdsourcetag=s_pctim_aiomsg
关于CMake编译opencv源码以及mexopencv的步骤:
https://github.com/kyamagu/mexopencv/wiki/Installation-(Windows%2C-MATLAB%2C-OpenCV-3)
OpenCV+opencv_contrib:https://github.com/opencv 或者 opencv官网下载opencv对应版本 https://opencv.org/releases.html
CMake : https://cmake.org/download/
mexopencv : https://github.com/kyamagu/mexopencv

下载软件及OpenCV源码

  1. 在github上下载对应版本的源码,点进opencv和opencv_contrib的资源库CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第1张图片
    选releases标签,选择对应的版本号下载(windows zip / linux tar.gz) CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第2张图片

  2. 下载 CMake 编译器,选择 Binary 版本的,根据操作系统选择 64 位版或 32 位版,下载后在bin文件夹中可以直接运行
    CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第3张图片

  3. 在github上下载 mexopencv 对应版本
    CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第4张图片

  4. 下载好后,选择一个合适的位置建立dev文件夹及四个子文件夹如图。将mexopencv,opencv,opencv_contrib解压后放入其中
    CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第5张图片

配置OpenCV

  1. 打开 cmake-gui.exe,设置source code位置为上述文件夹中的opencv-3.4.1,存放编译后文件的目标位置为build文件夹
    CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第6张图片
  2. 点击configure,选择编译器为Visual Studio 12 2013 Win64
    CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第7张图片
  3. 等待一会后,会出现红色选项,根据: https://github.com/kyamagu/mexopencv/wiki/Installation-(Windows%2C-MATLAB%2C-OpenCV-3) 的描述,取消某些选项的勾选,取消对这些模块的编译,勾选OPENCV_ENABLE_NONFREE。
    CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第8张图片
  4. 将dev文件夹下opencv_contrib中modules文件夹的地址设置在OPENCV_EXTRA_MODULES_PATH处(本文中例子为E:/dev/opencv_contrib/opencv_contrib-3.4.1/modules)
    CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第9张图片
  5. 点击configure确认,完成后,取消勾选下图中的模块,再次点击configure,确保无红色选项
    CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第10张图片
  6. 完成后点击generate
    CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第11张图片

编译OpenCV

  1. 用VS2013打开dev\build文件夹下的OpenCV.sln
    CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第12张图片
  2. 选择release模式,选择ALL_BUILD项目并生成CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第13张图片
  3. 等待一会,直至生成完毕
    CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第14张图片
  4. 选择INSTALL项目并生成,之后在 dev\build\install 文件夹下找到生成好的库文件
    CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第15张图片
  5. 设置环境变量 E:\dev\build\install\x64\vc12\bin 也可以将 dev\build\install 文件夹内的东西放置到任意的位置,同时按照新的位置设置环境变量
    CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第16张图片

使用mexopencv

  1. 打开MATLAB,输入 mex -setup 确认当前的编译器为VS2013。如果找不到对应编译器,可以参考 https://blog.csdn.net/gszhan/article/details/50951070 给出的解决方法
    CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第17张图片
  2. 将matlab工作目录切换至mexopencv所在路径,本文为 “E:\dev\mexopencv\mexopencv-3.4.1” 在命令行中输入以下命令
cd('E:\dev\mexopencv\mexopencv-3.4.1')
addpath('E:\dev\mexopencv\mexopencv-3.4.1')
addpath('E:\dev\mexopencv\mexopencv-3.4.1\opencv_contrib')
mexopencv.make('opencv_path','E:\dev\build\install', 'opencv_contrib',true)
  1. 等待编译完成
    CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第18张图片
  2. 将mexopencv的文件夹及子文件夹加入到MATLAB路径中,使得改变工作路径后,函数仍然可以被找到
    CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第19张图片
  3. 命令行输入 help cv ,可查看函数的相关帮助信息
    CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第20张图片
  4. 在命令行输入 cv.getBuildInformation() ,将显示相关信息。
    CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第21张图片

测试

通过生成 ARUCO 码进行测试,在MATLAB中执行以下脚本命令

%% Marker

% params
dictionaryId = '6x6_250';   % dictionary id
markerId = randi([0 249]);  % Marker id in the dictionary
borderBits = 1;             % Number of bits in marker borders
markerSize = 200;           % Marker size in pixels

%% Display

% show marker
dictionary = {'Predefined', dictionaryId};
markerImg = cv.drawMarkerAruco(dictionary, markerId, markerSize, ...
    'BorderBits',borderBits);
imshow(markerImg), title('Marker')

% save image
imwrite(markerImg, fullfile(tempdir(),'Marker.png'));

结果显示如下,配置成功
CMake + OpenCV3.4.1 (含contribute模块) + vs2013 编译生成库文件 及 MATLAB + mexopencv 实现 OpenCV 库函数调用方法_第22张图片

你可能感兴趣的:(编程环境配置)