CLion新手必看:CMakeLists.txt配置OpenCV和Eigen库的保姆级教程

CLion CMakeList的使用 感觉用Vscode的人比用Clion的人多好多,感觉Clion在配置各种库的时候比Vs好太多了,基本上只要在CMakelist上边做改动就行了,cmake看着好像很奇怪的样子,但是实际上很简单,只是几个固定的语句。 新建一个工程Test1,加一个main函数,这个时候Cmake里边就是这样的。 #声明要求的cmake最低版本 cmake_minimum_required(VERSION 3.19) #声明一个工程 project(Test1) set(CMAKE_CXX_STAND... 阅读详情

CLion深度配置指南:从零构建OpenCV与Eigen的现代C++开发环境

对于刚刚踏入C++世界,尤其是计算机视觉、机器人或高性能计算领域的开发者而言,CLion常常是那个既让人向往又令人望而却步的IDE。它提供了JetBrains家族一贯的智能体验,但入门时,尤其是面对CMake这个“构建系统生成器”时,很多人会感到迷茫。网上关于VSCode配置的教程铺天盖地,似乎那才是“主流”,但我想说,如果你追求的是一个开箱即用、深度集成且能伴随项目成长的专业环境,CLion配合CMake的优雅,值得你花时间掌握。这不仅仅是配置几个库那么简单,而是理解一个现代C++项目是如何被组织、构建和管理的起点。

今天,我们不谈空洞的理论,直接上手。我将带你穿越CLion中CMakeLists.txt的迷雾,以配置计算机视觉基石OpenCV和线性代数利器Eigen库为实战目标,构建一个稳固、可维护的项目基础。你会发现,所谓的“复杂配置”,其实只是一系列清晰、有逻辑的指令组合。无论你是正在做课程设计的学生,还是启动第一个个人项目的研究者,这篇指南都将为你扫清障碍。

1. 理解核心:CMake与CLion的共生关系

在开始点击鼠标和敲击键盘之前,我们必须先统一思想:CLion不是一个传统的、带图形界面配置项目的IDE。它的核心构建引擎是CMake。你可以把CMake看作项目的“总建筑师”,它阅读你写的蓝图(CMakeLists.txt),然后根据你当前的“施工环境”(操作系统、编译器),生成具体的“施工图纸”(如Makefile或Visual Studio的.sln文件)。CLion则是一个超级智能的“工程监理”,它不仅能读懂CMake的蓝图,还能实时展示项目结构、提供代码补全、并调用CMake生成工具链来编译和调试。

这种设计带来了一个巨大的优势:项目配置与IDE解耦。你的CMakeLists.txt文件是项目的一部分,在任何安装了CMake和相应工具链的机器上,都能用同样的方式构建,无论是用CLion、命令行还是其他支持CMake的编辑器。这彻底解决了“在我机器上能跑”的经典难题。

一个最基础的CMakeLists.txt骨架长这样:

# 指定CMake的最低版本要求,这能确保我们使用的特性是可用的
cmake_minimum_required(VERSION 3.20)
# 定义项目名称、版本和使用的编程语言
project(MyAwesomeProject VERSION 1.0.0 LANGUAGES CXX)

# 设置C++标准,强烈建议明确指定,避免不同编译器默认值不同
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON) # 强制要求使用指定的标准
set(CMAKE_CXX_EXTENSIONS OFF) # 禁用编译器特定扩展,保证代码可移植性

# 告诉CMake:我们最终要生成一个可执行文件,它叫`my_app`,由`main.cpp`源文件编译而来
add_executable(my_app main.cpp)

注意:CMAKE_CXX_STANDARD_REQUIRED和CMAKE_CXX_EXTENSIONS这两行至关重要。它们确保了你的代码严格按照ISO C++标准编译,避免因为GCC或Clang的扩展语法导致在MSVC上编译失败。

很多新手会疑惑,为什么CLion里不能像其他IDE那样右键添加库路径?答案就在于,CMake的理念是声明式的。你不需要告诉它“怎么找库”(手动指定include路径、lib路径),而是告诉它“我需要什么库”,由CMake利用它强大的find_package机制去自动寻找。这就像点菜,你只需要说“来一份宫保鸡丁”,而不是教厨师怎么切鸡丁、怎么炒花生米。

2. 实战准备:安装与验证OpenCV和Eigen

在配置CMake之前,我们需要确保“食材”已经备好。OpenCV和Eigen的安装方式多样,这里推荐最清晰、对CLion最友好的方式。

对于OpenCV,我强烈建议从源码编译,而不是使用预编译的二进制包。原因有三:第一,可以确保编译器版本(如MinGW-w64 GCC)与你的CLion工具链完全匹配;第二,可以自定义需要的模块(如不装opencv_contrib以减小体积);第三,这个过程本身能让你理解库的构成。

假设我们使用Windows系统下的MinGW-w64 GCC作为编译器,以下是编译步骤的精简流程:

  1. 下载源码:从OpenCV官网下载opencv和opencv_contrib的源码包。

  2. 配置CMake-GUI:

    • 源代码路径指向opencv源码目录。
    • 构建路径新建一个,例如opencv/build_mingw。
    • 点击“Configure”,选择MinGW Makefiles,指定编译器路径。
    • 在配置列表中,找到OPENCV_EXTRA_MODULES_PATH,将其值设置为opencv_contrib/modules的路径。
    • 可以根据需要勾选或取消模块(如BUILD_opencv_world可以将所有库合并为一个,方便链接但体积大)。
    • 再次点击“Configure”,直到没有红色条目,然后点击“Generate”。
  3. 编译与安装:

    # 打开终端,进入构建目录
    cd path/to/opencv/build_mingw
    # 使用多线程编译,数字8根据你的CPU核心数调整
    mingw32-make -j8
    # 安装到系统目录(通常是`build_mingw/install`)
    mingw32-make install
    

    编译完成后,关键的输出在install目录下,你会看到熟悉的include、bin、lib文件夹结构。

对于Eigen,则简单得多。Eigen是一个纯头文件库(Header-only Library),没有.lib或.a文件需要编译。你只需要从官网下载Eigen的源码包,解压到一个你喜欢的永久位置(例如D:/Libraries/eigen-3.4.0)即可。记住这个路径,我们稍后会在CMake中引用。

提示:为所有第三方库建立一个统一的存放目录是个好习惯,比如D:/Libraries/。这会让你的开发环境非常整洁,也便于备份和迁移。

安装完成后,验证一下环境。打开CLion,创建一个新的CMake Application项目,暂时不要修改CMakeLists.txt。在main.cpp里写一个最简单的程序,确保CLion能正确识别你的MinGW工具链并编译运行。这是所有后续操作的基础。

3. 优雅集成:在CMakeLists.txt中配置外部库

现在进入核心环节。我们将把准备好的OpenCV和Eigen集成到项目中。记住,我们的目标不是写一个能跑就行的脚本,而是一个清晰、健壮、可维护的配置。

3.1 配置OpenCV:使用find_package的现代范式

首先,我们需要告诉CMake去哪里找我们编译好的OpenCV。虽然可以直接用set(OpenCV_DIR ...)设置路径,但更推荐在系统层面或CLion的配置中设置环境变量OpenCV_DIR,这样所有项目都能受益,且CMakeLists.txt更干净。

假设你已经将OpenCV_DIR环境变量设置为D:/Libraries/opencv/build_mingw/install(即包含OpenCVConfig.cmake文件的目录)。那么配置OpenCV就变得非常优雅:

# 在`add_executable`之后,寻找OpenCV包
find_package(OpenCV REQUIRED COMPONENTS core highgui imgproc)

# 检查是否找到
if(OpenCV_FOUND)
    message(STATUS "OpenCV library status:")
    message(STATUS "    version: ${OpenCV_VERSION}")
    message(STATUS "    libraries: ${OpenCV_LIBS}")
    message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")
else()
    message(FATAL_ERROR "OpenCV not found. Please set OpenCV_DIR environment variable.")
endif()

# 将OpenCV的头文件目录添加到编译器的搜索路径中
target_include_directories(my_app PRIVATE ${OpenCV_INCLUDE_DIRS})

# 将可执行文件`my_app`与OpenCV的库文件链接起来
target_link_libraries(my_app PRIVATE ${OpenCV_LIBS})

这里有几个关键点:

  • COMPONENTS:你可以指定只寻找你需要的模块,如core, highgui, imgproc。这能加快配置速度,并确保你只链接了必要的库。
  • target_include_directories和target_link_libraries:这是现代CMake(3.0+)推荐的做法。它们的作用域精确到特定的目标(my_app),避免了使用旧的include_directories和link_libraries命令造成的全局污染。
  • PRIVATE关键字:意味着这些头文件和库仅用于构建my_app目标本身。如果你的项目有多个库,它们之间有不同的依赖关系,可以使用PUBLIC(依赖传递)或INTERFACE(仅接口依赖)来精细控制。

3.2 配置Eigen:处理纯头文件库

Eigen的配置更简单,因为它没有需要链接的二进制库。我们只需要告诉编译器头文件在哪里。

# 方法一:使用`find_package`(如果Eigen安装在系统标准路径或通过包管理器安装)
find_package(Eigen3 REQUIRED)
if(Eigen3_FOUND)
    target_include_directories(my_app PRIVATE ${EIGEN3_INCLUDE_DIR})
endif()

# 方法二:直接指定路径(更常见,因为Eigen常以源码形式存在)
# 假设你的Eigen解压在 D:/Libraries/eigen-3.4.0
set(EIGEN3_INCLUDE_DIR "D:/Libraries/eigen-3.4.0")
target_include_directories(my_app PRIVATE ${EIGEN3_INCLUDE_DIR})

注意:对于Eigen这样的纯头文件库,target_link_libraries是不需要的,也不应该调用。

3.3 完整的CMakeLists.txt示例

将以上部分组合起来,一个结构清晰、配置了OpenCV和Eigen的CMakeLists.txt如下所示:

cmake_minimum_required(VERSION 3.20)
project(VisionDemo VERSION 0.1.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

# 添加可执行目标
add_executable(vision_demo
    src/main.cpp
    src/ImageProcessor.cpp # 假设你还有其他源文件
)

# 配置Eigen (头文件库)
set(EIGEN3_INCLUDE_DIR "D:/Libraries/eigen-3.4.0")
target_include_directories(vision_demo PRIVATE ${EIGEN3_INCLUDE_DIR})

# 配置OpenCV
find_package(OpenCV REQUIRED COMPONENTS core highgui imgproc)
if(OpenCV_FOUND)
    target_include_directories(vision_demo PRIVATE ${OpenCV_INCLUDE_DIRS})
    target_link_libraries(vision_demo PRIVATE ${OpenCV_LIBS})
else()
    message(WARNING "OpenCV not found, some features will be disabled.")
endif()

# 可选:为你的目标设置一些属性,例如输出可执行文件的目录
set_target_properties(vision_demo PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

在CLion中,当你保存这个CMakeLists.txt文件时,它会自动触发“Reload CMake Project”。你可以在CLion底部的“CMake”工具窗口看到配置的输出信息,确认OpenCV found和路径是否正确。

4. 进阶技巧与故障排除

掌握了基本配置后,我们来看看如何让这个开发环境更加强大和顺手。

4.1 管理多目标与复杂项目结构

一个真实的项目不可能只有一个可执行文件。你可能有库、有测试程序、有示例代码。CMake可以很好地管理这种结构。

# 项目根目录的 CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
project(MyProject LANGUAGES CXX)

# 添加子目录,每个子目录都有自己的CMakeLists.txt
add_subdirectory(src) # 主库源码
add_subdirectory(apps) # 应用程序
add_subdirectory(tests) # 测试代码

# 在根目录配置全局依赖,如Eigen
set(EIGEN3_INCLUDE_DIR "D:/Libraries/eigen-3.4.0")
# 注意:这里不直接使用`target_include_directories`,因为目标在子目录中定义。

在src/CMakeLists.txt中,你创建一个库:

# 创建一个静态库
add_library(my_lib STATIC
    core.cpp
    utils.cpp
)
# 为这个库添加依赖
target_include_directories(my_lib PUBLIC
    ${EIGEN3_INCLUDE_DIR} # PUBLIC意味着使用my_lib的目标也会获得这个头文件路径
    ${CMAKE_CURRENT_SOURCE_DIR}/include # 自己的公共头文件
)
find_package(OpenCV REQUIRED)
target_link_libraries(my_lib PRIVATE ${OpenCV_LIBS})

在apps/CMakeLists.txt中,创建可执行文件并链接这个库:

add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE my_lib) # 链接自己的库,其依赖会自动传递

4.2 利用CLion的特性提升效率

  • CMake Profiles:在CLion的设置中,你可以创建多个CMake配置。例如,一个Debug配置使用-g -O0,另一个Release配置使用-O3 -DNDEBUG。你可以为不同配置指定不同的构建目录,甚至不同的工具链,一键切换。
  • CMake Cache:在“CMake”工具窗口,你可以直接查看和编辑CMake缓存变量,无需修改CMakeLists.txt。这对于临时调整路径或开关选项非常方便。
  • 自动重载:CLion会监控CMakeLists.txt和相关源文件的更改,并提示你重载CMake项目。养成保存后看一眼CMake输出窗口的习惯,能及早发现配置错误。

4.3 常见问题与解决思路

  1. find_package找不到OpenCV:

    • 检查:确保OpenCV_DIR环境变量指向的是包含OpenCVConfig.cmake的目录(即编译安装后的install目录或build目录)。
    • 手动指定:在CMakeLists.txt最前面强制设置:set(OpenCV_DIR "你的路径" CACHE PATH "OpenCV config dir")。
    • 验证:在CLion的CMake输出中,搜索Found OpenCV,看路径是否正确。
  2. 链接错误(undefined reference):

    • 顺序问题:确保target_link_libraries在add_executable之后。
    • 组件缺失:检查find_package(OpenCV REQUIRED COMPONENTS ...)是否包含了所有你用到的模块(如imgcodecs用于读写图片)。
    • 库文件缺失:确认OpenCV编译时是否开启了BUILD_SHARED_LIBS。如果编译的是动态库(.dll),需要确保运行时PATH环境变量包含OpenCV的bin目录。CLion在运行配置中通常可以设置环境变量。
  3. Eigen编译警告或错误:

    • 对齐警告:Eigen对内存对齐要求严格。如果使用STL容器存储Eigen固定大小对象(如Vector4d),可能会警告。可以使用Eigen::aligned_allocator或启用C++17的std::aligned_alloc。
    • C++标准:确保你的CMAKE_CXX_STANDARD设置足够高,Eigen的新特性可能需要C++11/14/17。

配置环境的过程,本质上是一个与工具链和构建系统对话的过程。第一次成功编译并运行一个调用了cv::imread和Eigen::Matrix的程序时,那种成就感是独特的。这不仅仅是两个库的配置成功,更是你理解了现代C++项目开发流水线中关键一环的标志。从此,你可以将同样的模式应用到任何其他库,如Boost、PCL、Qt等,你的CLion将成为真正强大的、属于你的C++工作站。

【笔记】Clion 中运行 C/C++11 之 CMakeLists.txt 的配置 该文章记录第一次使用 Clion 时,对 CMakeLists 的配置,使其能够运行 C/C++11 的代码。 阅读详情

相关推荐

CLion中CMakeLists.txt的隐藏技巧:多项目管理和自动更新配置

本文深入探讨了CLion中CMakeLists.txt的高级使用技巧,重点介绍了如何高效管理多项目结构以及利用IDE自动化功能实现配置的自动更新。通过子目录模块化、现代CMake实践(如target_系列命令)和CLion的智能辅助,开发者可以大幅提升C++项目的开发效率和可维护性,告别手动编辑配置文件的繁琐。

weixin_28829325的博客 337

Clion中运行C/C++之CMakeLists.txt的配置

PS:创作的源动力就是踩坑 前言: 在Clion中编写文件的前提是已经配置好了MinGW环境 01 关于CMakelist.txt CMake是一个跨平台的安装(编译)工具,它使用一个叫CMakeList.txt的文件来描述项目的建筑过程,可以产生标准的构建文件,即用文件来管理文件,不同于其他开发软件(像IDEA,pycharm),这些软件实现管理各种包或目录的功能不同于Clion是用文件来管理,但类似于Unix的Makefile/automake,因此学习CMakeList.txt的配置时如何使用

AChain1117的博客 9846

从零构建视觉SLAM工程:CMake配置与C++依赖管理实战指南

在C++工程开发中,依赖管理和构建系统配置是项目成功的基础环节。CMake作为跨平台构建工具,通过CMakeLists.txt配置文件,能够自动化生成Makefile或Visual Studio项目文件,实现编译环境的统一管理。其核心价值在于简化了第三方库(如OpenCV、Eigen)的查找与链接过程,提升了项目的可维护性和跨平台兼容性。在计算机视觉和机器人领域,视觉SLAM(同步定位与地图构建)项目通常涉及复杂的数学运算和图像处理,对工程配置的健壮性要求极高。通过结合VSCode开发环境,开发者可以高效地

weixin_34320159的博客 341

Clion中CMakeLists.txt配置

参考 如何在 clion 运行多个 main 函数:https://blog.cugxuan.cn/2019/11/01/Software/multi-main-func-run-in-clion/

张家四少 1832

CLion中CMakeList的配置与多项目管理实战

本文详细介绍了在CLion中配置CMakeLists.txt以高效管理多项目工程的实战技巧。通过模块化项目结构、共享库配置和外部依赖管理等方法,开发者可以提升C++项目的构建效率与可维护性。文章特别强调了CLion与CMake的深度整合优势,包括自动识别配置变更和快速切换调试目标等功能。

weixin_42557803的博客 194

SLAM14讲课本代码排雷汇总

SLAM14讲课本代码排雷汇总ch2安装cmake选择一个顺手的IDEch3安装eigeneigen::isometry 描述转换矩阵ch4sophus的相关编译心得,选择一个优秀的IDE对菜鸟真的很重要,目前来看visual studio还是很好的,可配置性搞,稍微花点功夫配置以下还是用起来很舒服的 ch2 安装cmake 选择一个顺手的IDE 推荐clion(学生账号可免费领一年),VS ch3 安装eigen eigen::isometry 描述转换矩阵 其中个元素的存储顺序是什么样的,平移在前还是旋

nicheng123lala的博客 300

Clion使用脚本实现对.c文件自动添加至CMakeLists.txt

4.如果以上没有实现自动添加,提示python解释器问题再做如下。尽管每次重启clion后这个都会显示未配置但并不会造成影响。3. 找到插件并进行配置。

qq_62331166的博客 1131

SLAM开发实战指南:2024年核心开源库盘点与高效学习路径

即时定位与地图构建(SLAM)是机器人感知与自主导航的核心技术,其原理是通过融合多传感器数据,实时估计自身运动并构建环境地图。这项技术的价值在于为自动驾驶、移动机器人、增强现实等应用提供了关键的定位与环境理解能力。在工程实践中,一个稳健的SLAM系统离不开高效、可靠的数学库与算法框架作为支撑。例如,Eigen作为线性代数计算的基石,其表达式模板技术能生成高性能代码,但需注意其内存对齐问题以避免程序崩溃;而Ceres Solver作为非线性优化库,则让开发者能专注于定义代价函数,优雅地解决后端优化问题。本文聚

weixin_33682790的博客 425

CLion新手必看:5分钟搞定CMakeLists.txt配置(含OpenCV/Eigen库添加指南)

本文为CLion新手提供了快速配置CMakeLists.txt的实用指南,重点讲解了如何高效集成OpenCV和Eigen等常用库。通过对比VSCode的复杂配置,突出CLion与CMake深度集成的优势,帮助开发者掌握现代CMake语法,实现项目构建的简化与标准化,提升C++开发效率。

hp777的博客 371

eigen-3.4.0版本

eigen库,矩阵计算的库。

AI数字人短视频数字人口播数字人分身建模流程全解析

在人工智能与计算机图形学蓬勃发展的当下,数字人建模作为打造虚拟数字人的核心环节,其流程复杂且精妙,融合了多种前沿技术与创意构思,为栩栩如生的数字人形象奠定基石。​。

2403_87518095的博客 1451

CMakeLists.txt用法备忘

是 CMake 构建系统的核心配置文件,它使用 CMake 语言来定义项目的构建过程。,你可以跨平台地管理 C、C++、Fortran 等项目的编译、链接、测试和安装。CMake通过CMakeLists.txt配置项目的构建系统,配合使用。cmakelists.txt会根据 系统变量找pcl相关路径。Pcl点云也可以在cmakelists.txt中设置。VScode 中使用CMakeLists.txt。Clion中使用(vscode也可以)生成构建系统并执行编译、测试。

ivanwfy的专栏 302

2025.1.16——五、LoveSQL1 sqlmap文件类|万能密码

题目来源:BUUCTF[极客大挑战2019]LoveSQL1。

2402_87387800的博客 1072

CLion结合主流开发库的cmakelist完整配置

转至“https://my.oschina.net/u/4404738/blog/3411902” 开发环境:ubuntu 18.04 IDE:Clion 2019 配置的库文件: ①opencv4.1.0 ② json.cpp ③boost ④eigen ⑤cnpy ⑥zxing ⑦zbar cmake_minimum_required(VERSION 3.5) project(KeekoAIRobot) set(CMAKE_CXX_STANDARD 14) #set(CMAK

YMWM_的博客 1638

在已有win10系统下安装Ubuntu,最后出现执行‘grub-install/dev/nvme0n1p5‘失败的致命错误的解决方案

本人电脑型号戴尔灵越,两个SSD512G固态硬盘,c盘为系统盘. Ubuntu版本为20.04LTS,在官网下载https://ubuntu.com/download/desktop/thank-you?version=20.04.3&architecture=amd64 系统盘制作工具为Rufus-3.15http://rufus.ie/zh/ 安装过程网上很多,在这里就不赘述了. 其他安装过程都很顺利,直至安装最后出现这个 本来安装了到最后还以为成了,结果又不行...... 后.

XiaoChen_gugugu的博客 1万+

手把手教你用Apollo Dreamview调试自动驾驶感知模块(附数据包下载)

本文详细介绍了如何使用百度Apollo平台的Dreamview工具调试自动驾驶感知模块,包括环境配置、数据加载、感知问题定位和多传感器融合调试等关键步骤。通过实战案例和参数调整技巧,帮助开发者快速掌握自动驾驶感知模块的调试方法,提升开发效率。

weixin_29084111的博客 142

CmakeLists.txt书写规范

文章目录 开头部分-指定输出路径 中间部分-指定工程依赖 结尾部分-指定输出文件 CMakeLists.txt链接库文件的方式 区分link_directories, link_libraries , target_link_libraries CMakeLists.txt文件链接有两种方式 转自:https://blog.csdn.net/优快云huaong/article/details/...

思盖木木の博客 782

通达信【雷霆尊者排序】实战指南:高胜率竞价指标解析与优化策略

本文详细解析了通达信【雷霆尊者排序】指标在集合竞价阶段的应用,提供从基础设置到实战解码的完整指南。文章重点剖析了‘雷霆’、‘使者’、‘精选’等核心信号的逻辑与共振策略,并分享了如何结合K线、市场情绪进行综合研判与风险控制,旨在帮助短线交易者提升早盘选股效率与胜率。

pear55的博客 954

19、Opencv4.4的仿射矩阵处理

基本思想:深入学习一下仿射矩阵的使用和分解 环境 window10+Mingw32+Opencv4.4.0+Eigen 这里仅说明一下Eigen库的导入方法, 首先去Eigen官网下载Eigen源码,解压导入Clion工程中,修改CMakeLists.txt, 配置Opencv4.4.0 试一下Reflectabout origin的方法 CMakeLists.txt cmake_minimum_required(VERSION 3.17) project(untitled6) se..

sxj731533730 794

Xilinx-复旦微-FPGA-眼图BlockDesign系统制作-针对PCIE系统

XIlinx-复旦微电子-FPGA-眼图BlockDesign系统制作-针对PCIE系统,手把手教你如何建立眼图测试

weixin_43444334的博客 2599

OpenCV+ArUco实战:如何用Python实现高精度二维码测距(附完整代码)

本文详细介绍了如何使用Python和OpenCV实现基于ArUco标签的高精度单目视觉测距。通过相机标定、标签检测和三维位置估算,结合完整代码示例,帮助开发者在机器人导航、工业自动化等场景中实现厘米级距离测量,并探讨了精度优化与三维可视化等进阶应用。

weixin_29052717的博客 478

基于 Docker 的 C++ 开发环境搭建与 CLion 集成教程

本文档是一份经过实测验证的完整操作指南,系统性地讲解如何制作一个基于 Fedora 44 的 C++ 开发 Docker 镜像,并将其集成到 CLion 中进行课程开发。全文共 12 章,所有命令均标注了可自定义项(22 处【自定义】标记),读者可随时按需调整。

weixin_55308659的博客 477

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

对Sophus::SO3::vee未定义的引用

对Sophus::SO3::vee(Eigen::Matrix<double, 3, 3, 0, 3, 3> const&)未定义的引用 ubuntu16.04+clion中遇到这种错误: 解决办法: cmake_minimum_required( VERSION 3.5 ) project( ORBEXERCISE) set( CMAKE_BUILD_TYPE "R...

sunshine 1736

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

slam14讲-第二版-安装包

slam14讲 源码介绍 slam14讲第二版源码:slambook2 注意:slam14讲有两个版本,也有两个源码。第二版是目前最新。 slambook2---->3rdparty------>ceres-solver ------>DBoW3 ------>g2o ............后面文件省略 ----->ch2 ----->ch3 ............后面文件省略 注意:在3rdparty文件

free_luojing的博客 2808

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++实现KCF目标跟踪:从原理到工程实践

目标跟踪是计算机视觉中的一项基础任务,旨在连续定位视频序列中的特定目标。其核心原理通常涉及特征提取、运动建模和外观更新。相关滤波技术通过将计算转换到频域,利用快速傅里叶变换(FFT)将空间域的卷积运算转化为频域的逐元素乘法,从而实现了计算效率的极大提升,这是实现实时跟踪的关键技术价值。KCF(核化相关滤波)算法在此基础上,进一步引入了循环矩阵和核技巧,前者通过密集采样提升了样本利用效率,后者通过核函数映射增强了非线性判别能力,使得算法在复杂场景下仍能保持高精度。该技术广泛应用于智能监控、自动驾驶、增强现实和

weixin_33866037的博客 529
上一篇: 扩散策略太慢?手把手教你用扩散蒸馏技术(Diffusion Distillation)实现62Hz实时控制
下一篇: CRMEB电商系统安装避坑大全:从环境配置到伪静态设置的完整流程
普通网友
博客等级 码龄27年 205粉丝 1502原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值