本文主要介绍如何搭建C++开发图像算法的环境,使用到CMake + libtorch + OpenCV + ITK等。旨在构建一个可融合深度学习框架,可开发图像处理算法且易于跨平台编译的环境。
准备条件:C++编译器visual studio
安装教程可参照:工具类之C++开发环境VS2019下载与安装
1 介绍
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。【百度百科介绍】
简单来说:开发者在平台A利用 CMake 产生标准的建构档CMakeLists.txt。在平台B下载源码的同时也下载CMakeLists.txt文件,使用cmake命令运行CMakeLists.txt,就会产生工程所需的makefile文件。可以更快的搭建工程
2 CMake下载安装
根据自己的平台下载相应的版本 点击这里下载 ,下载之后解压即可
1 下载安装
2 测试
(2)在CmakeLists.txt中编写如下测试代码,注意修改自己的路径。编写完成后点击保存。
cmake_minimum_required(VERSION 3.17)
project(test_torch)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_BUILD_TYPE RELEASE)
include_directories(C:\libs\libtorch\include) // 修改libtorch路径
set(TORCH_LIBRARIES C:\libs\libtorch\lib) // 修改libtorch路径
link_directories(${TORCH_LIBRARIES})
add_executable(test_torch CmakeProject1.cpp) // 修改.cpp文件名
target_link_libraries(test_torch
asmjit.lib
c10.lib
caffe2_detectron_ops.lib
caffe2_module_test_dynamic.lib
clog.lib
cpuinfo.lib
fbgemm.lib
libprotobuf.lib
libprotobuf-lite.lib
libprotoc.lib
mkldnn.lib
torch.lib
torch_cpu.lib
)
set_property(TARGET test_torch PROPERTY CXX_STANDARD 14)
在CmakeProject1.cpp中编写如下测试代码,编写完成后点击运行
#include
#include
int main()
{
torch::Tensor tensor = torch::rand({ 9,9 });
std::cout << tensor << std::endl;
return 0;
}
1 若报错
解决:打开cmake设置,修改cmake生成器
2 若提示找不到xx.dll,则将libs/libtorch/lib文件夹下所有dll后缀的文件复制到vs工程的out/bulid/x64-debug或release文件夹中
1 下载安装
安装后如图,其中build是OpenCV使用时要用到的一些库文件,而sources中则是OpenCV官方为我们提供的一些demo示例源码
配置环境变量:将OpenCV执行文件的路径 F:\opencv\build\x64\vc15\bin添加到环境变量中
2 测试
新建Cmake项目CMakeProject2
在CmakeLists.txt中编写如下测试代码,注意修改自己的路径。编写完成后点击保存。
cmake_minimum_required (VERSION 3.8)
project ("test_opencv")
SET(CMAKE_BUILE_TYPE RELEASE)
INCLUDE_DIRECTORIES(
E:\opencv\opencv\build\include
E:\opencv\opencv\build\include\opencv2
)
SET(OpenCV_LIBS E:\opencv\opencv\build\x64\vc15\lib)
LINK_DIRECTORIES(${OpenCV_LIBS})
add_executable(test_opencv1 CMakeProject2.cpp)
target_link_libraries(test_opencv1
opencv_world440.lib
)
set_property(TARGET test_opencv1 PROPERTY CXX_STANDARD 14)
在CmakeProject2.cpp中编写如下测试代码,注意修改图片路径,编写完成后点击运行
#include
#include
using namespace std;
using namespace cv;
int main()
{
Mat src = imread("E:\1.jpg");
imshow("show image", src);
waitKey(0);
return 0;
}
运行操作步骤如图:
如果在调试窗口显示输入的图片,表示成功安装啦~
1 简介
ITK( Insight Segmentation and Registration Toolkit)是美国国家卫生院下属的国立医学图书馆开发的一款医学图像处理软件包,是一个开源的、跨平台的影像分析扩展软件工具。ITK使用C++开发,可由cmake生成不同环境下的可编译工程,并且ITK有对Tcl, Python和Java的封装层,使得开发者可以使用不同的语言进行开发。
2 利用cmake安装,这一步比较繁琐,耐心哦~
(2)创建如下目录
ITK
|-- itk-built
|-- ITK-BIN
|-- InsightToolkit-5.1.1(下载后的ITK解压在此目录下)
(3)在cmake-gui.exe安装itk
选好source code(D:\ITK\InsightToolkit-5.1.1)和bin路径(D:\ITK\ITK_bin)后,点击configure,直到没有红色的选项。注意选择BUILD_SHARED_LIBS,不然无法生成dll文件。找到CMAKE_INSTALL_PREFIX 选项,这个是表示 ITK 的安装路径,其头文件、lib 文件和动态链接库 dll 文件;没有红色的选项后点击generate。
勾选和改CMAKE_INSTALL_PREFIX地址为ITK_built地址之后,再次点击configure,直至红色消失
没有红色之后,点击生成generate
(4)点击下方open project打开生成好的vs解决方案,选择文件->打开->项目/解决方案(选择ITK_bin目录下的ITK.sln文件)打开,如果要生成Release版记得选择
点击生成,记得在release x64模式下
点击ALL BUILD,选择仅用于项目,选择仅生成ALL BUILD(B)
完成后点击INSTALL,选择Project Only
(5)保存所有的dll文件
建议把libtorch、ITK和opencv的dll文件拷到一起放在一个文件夹里,回头一起考到工程目录/out/build/x64-Release中
dll文件路径(共81个)
opencv
E:\opencv\opencv\build\x64\vc15\bin
ITK(是cmake_install_prefix那个路径对应的bin)
E:\ITK\ITK-BIN\bin
lib
E:\libs\libtorch\lib
3 测试
(1)新建cmake项目
(2)复制测试代码,修改路径
(3)将dll_save里面dll文件复制工程目录\out\build\x64-Release下。保存txt文件,生成解决方案,运行。
CmakeLists.txt
cmake_minimum_required (VERSION 3.8)
project ("itkHelloworld")
# 包含子项目。
# add_subdirectory ("itkHelloworld")
set(CMAKE_PREFIX_PATH D:\ITK\ITK_built)
find_package(ITK REQUIRED)
include(${ITK_USE_FILE})
add_executable(HelloWorld CMakeProject3.cpp)
# 后面要加一句
target_link_libraries(HelloWorld ${ITK_LIBRARIES})
CmakeProject3.cpp
#include "itkImage.h"
#include
int main()
{
using ImageType = itk::Image<unsigned short, 3>;
ImageType::Pointer image = ImageType::New();
std::cout << "ITK Hello World !" << std::endl;
return EXIT_SUCCESS;
}
到此利用C++开发图像算法(可调用深度学习框架pytorch)的环境就搭建好了,接下来就开始好好耕耘码田叭~