夏令营培训2——OpenCV基础学习
0. 安装OpenCV
本次夏令营重点进行OpenCV的一些简单学习
推荐安装版本OpenCV 4.5.1,同时安装OpenCV Contrib(注:OpenCV和OpenCV Contrib版本需要一致)
opencv官网:https://opencv.org/
推荐使用Cmake-GUI安装
先下载一些依赖库
sudo apt-get install cmake cmake-gui
sudo apt-get install libeigen3-dev
sudo apt-get install libboost-all-dev
sudo apt-get install libgtk2.0-dev libvtk7-dev
sudo apt-get install pkg-config
cmake-gui
- 选择opencv文件夹和新建build文件夹,然后点击configure

修改CMAKE+BUILD_TYPE为RELEASE
修改OPENCV_EXTRA_MODULES_PATH为/..自己的目录../opencv/opencv_contrib/modules,以安装opencv_contrib
勾选OPENCV_GENERATE_PKGCONFIG、OPENCV_ENABLE_NONFREE
再点击configure

- 点击configure和generate,完成cmake配置
- 进入build文件夹,编译
sudo make -j4 #4线程编译
sudo make install #安装
1. 任务1——Mat
在电脑中随便选择一张图片,使用imread读取该图片,并使用imshow可视化该图片
- 要求:掌握OpenCV基础Mat类型,使用cmake编译并运行
2. 任务2——摄像头和颜色
如果使用的是虚拟机,则需要从可移动设备中,将摄像头与主机断开连接,并连接至虚拟机上
使用VideoCapture打开一个摄像头
可以是电脑自带摄像头,也可以是usb外接摄像头(如果都没有,请参考IP摄像头调用手机摄像头.md)
实时捕获摄像头图像数据,并将图片色彩空间转换到HSV色彩空间,实时提取出摄像头图像数据中的红色、蓝色、白色
- 要求:学会调用摄像头捕获图像,并了解RGB、HSV等色彩空间,基于色彩空间学会颜色提取
3. 任务3——形态学操作
学习一些形态学操作,如膨胀、腐蚀、开运算、闭运算等
学习边缘提取(如Canny)和findContours函数,在任务二的基础上,实时提取出红色、蓝色、白色的轮廓,且利用形态学操作消除一些噪点(或一些面积过小的色块)
- 要求:学会基础的形态学操作,辅助消除图像噪声等
4. 任务4——透视变换
学习掌握透视变换的原理
重点掌握getPerspectiveTransform和warpPerspective两个函数,拍摄一个物体(如A4纸),并利用透视变换校正视角为正视该物体
- 要求:学会利用透视变换获取不同的视角
5. 任务5——DNN神经网络调用基础
阅读理解DNN神经网络调用的模板(在附件代码中dnn_template),会基于已经训练好的模型文件运行DNN神经网络
- 要求:学会调用DNN神经网络模板,能切换不同的模型文件运行DNN神经网络进行识别
之后线下进行模型文件训练的教学,也可提前查看opencv_dnn模型训练.md文件自行学习
后续带*的任务是附加任务非必需任务,但对进一步理解图像处理有更深的帮助
*6. 任务6——查阅学习几个坐标系
自行查阅资料,了解图像坐标系、像素坐标系、相机坐标系、世界坐标系等几个坐标系之间的变换关系
*7. 任务7——查阅学习相机原理
深度相机(可以测量距离的相机)大致包含:双目深度相机、结构光相机、TOF相机等,请查阅学习这些相机的测距原理
夏令营培训1——配置部分
0. C++
请自行进行C++基础学习,特别如常用STL库和面向对象语法
https://oi-wiki.org/lang/helloworld/ 这是C++的一些简单介绍
0.1. Markdown
下载阅读器阅读Markdown文件(推荐使用typora,注:typora最近开始收费,觉得不贵的可以支持一下,也可以找一个早期的免费版本)
简单学习Markdown编写的语法
1. Ubuntu
安装ubuntu操作系统,推荐安装版本20.04(或18.04)
- 学习目标:后续的学习均会基于ubuntu操作系统进行,需要简单了解一些终端的命令行操作等,ubuntu会有大量基于终端的操作,在后续使用学习中逐渐掌握
可以安装虚拟机,如果有后续想更进一步的学习推荐安装实体机(虚拟机最大的问题不能调用独显);如果有安装实体机、且有NVIDIA显卡的同学,可以再安装cuda和cudnn,方便后续调用独显加速运算
虚拟机推荐使用VMW
推荐安装时至少预留40GB,如果有后续想更进一步的学习推荐至少至少预留128GB,ubuntu系统想要扩容比较麻烦
设置密码时推荐设置一个简单的密码(如1这种),ubuntu系统需要频繁使用密码故设置简单点好
- 注:安装完ubuntu后,请更换国内镜像源,避免因墙难以下载东西,参考更换国内源
2. CMake
cmake的安装可以在更换完镜像源后直接使用命令行进行安装:
sudo apt-get install cmake cmake-gui
参考附件中CMake Practice.pdf学习CMake
- 学习目标:CMake只是辅助编译使用的工具,要求能看懂理解,并且能完成一些debug工作,打下一些基础不影响后续编译文件就行
学习完CMake后,请阅读以下CMake文件,若能基本理解即可进行后续的学习
后续的学习中,请均基于CMake编译运行文件
## 注:这份文件包含了一些我们机器人队常用的库
## 如:ZED——双目摄像头库 OpenCV——图像处理库 CUDA——显卡加速库 Threads——多线程库
## PCL——点云处理库 Slamtec——思岚雷达库
## 各位后续可以基于此CMake文件稍作修改作为自己的CMake文件使用,不需要重复造轮子
## 但是需要能根据自己编写的代码进行调整
CMAKE_MINIMUM_REQUIRED(VERSION 3.5)
PROJECT(lidar)
option(LINK_SHARED_ZED "Link with the ZED SDK shared executable" ON)
option(ENABLE_CUDA "" ON)
if (NOT LINK_SHARED_ZED AND MSVC)
message(FATAL_ERROR "LINK_SHARED_ZED OFF : ZED SDK static libraries not available on Windows")
endif()
SET(EXECUTABLE_OUTPUT_PATH ".")
SET(CUDA_NVCC_FLAGS -gencode arch=compute_53,code=sm_53)
set(CMAKE_CXX_FLAGS "-lstdc++ -pthread" )
#set(CMAKE_BUILD_TYPE Release)
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS "-std=c++17 -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "-std=c++17 -O3")
find_package(ZED 3 REQUIRED)
find_package(OpenCV REQUIRED)
find_package(CUDA 11.2)
find_package(Threads REQUIRED)
find_package(PCL 1.10 REQUIRED COMPONENTS common io visualization)
find_package(PCL 1.10 REQUIRED)
IF(NOT WIN32)
add_definitions(-Wno-format-extra-args)
SET(SPECIAL_OS_LIBS "pthread" "X11")
ENDIF()
include_directories(${CUDA_INCLUDE_DIRS})
include_directories(${ZED_INCLUDE_DIRS})
include_directories(${OpenCV_INCLUDE_DIRS})
include_directories(${PCL_INCLUDE_DIRS})
include_directories(${PROJECT_SOURCE_DIR}/slamtec/include/)
include_directories(include)
link_directories(${ZED_LIBRARY_DIR})
link_directories(${CUDA_LIBRARY_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
link_directories(${PROJECT_SOURCE_DIR}/slamtec/share/)
add_definitions(${PCL_DEFINITIONS})
LIST(APPEND CUDA_NVCC_FLAGS -std=c++14;-O2)
LIST(APPEND CUDA_NVCC_FLAGS -Xcompiler;-fPIC)
SET(CUDA_PROPAGATE_HOST_FLAGS OFF)
LIST(APPEND CUDA_NVCC_FLAGS -gencode arch=compute_50,code=sm_50)
LIST(APPEND CUDA_NVCC_FLAGS -gencode arch=compute_60,code=sm_60)
FILE(GLOB_RECURSE SRC_FILES src/*.cpp)
FILE(GLOB_RECURSE HDR_FILES include/*.hpp)
CUDA_ADD_EXECUTABLE(r2 main.cpp ${HDR_FILES} ${SRC_FILES})
add_definitions(-std=c++14 -O2)
if (LINK_SHARED_ZED)
SET(ZED_LIBS ${ZED_LIBRARIES} ${CUDA_CUDA_LIBRARY} ${CUDA_CUDART_LIBRARY})
else()
SET(ZED_LIBS ${ZED_STATIC_LIBRARIES} ${CUDA_CUDA_LIBRARY} ${CUDA_LIBRARY})
endif()
target_link_libraries(r2 ${ZED_LIBS})
target_link_libraries(r2 ${OpenCV_LIBS})
target_link_libraries(r2 Threads::Threads)
target_link_libraries(r2 ${PCL_LIBRARIES})
target_link_libraries(r2 ${PROJECT_SOURCE_DIR}/slamtec/share/libsl_lidar_sdk.a)