【IPMV】 Lab0 实验环境准备与OpenCV Hello World

Lab0 实验环境准备与OpenCV Hello World

参考自同济大学蒋磊老师编写的IPMV实验说明
同济大学自动化专业IMPV课程学习记录 (包含知识点以及实验)


Lab0 实验环境准备与OpenCV Hello World
Lab1-1 OpenCV入门与实践——从基础操作到实时视频处理(一)
Lab1-2 OpenCV入门与实践——从基础操作到实时视频处理(二)
Lab2-1 从零玩转Eigen库:掌握线性代数与OpenCV互操作的神器!(一)
Lab2-2 从零玩转Eigen库:掌握线性代数与OpenCV互操作的神器!(二)
Lab4 Blending 线性混合与拉普拉斯金字塔混合对比

待更新



本项目旨在在 Ubuntu 24.04.x LTS 虚拟机中配置 OpenCV、Eigen、Sophus 和 GeographicLib 等库的编译环境,并通过编写一个简单的 “Hello World” 程序来验证配置的正确性。


0 任务

  • 准备实验环境
  • 获取opencv / eigen / sophus / geographiclib等库的源代码
  • 编译并安装必要的软件包:CMake、GCC、G++等,并配置环境
  • 编写一个简单的 C++ 程序来验证环境配置是否成功

1 准备实验环境

1.1 在虚拟机中安装Ubuntu Linux

我们的实验需要以下最低硬件要求:

  • Intel/AMD x86_64兼容的CPU;
  • 至少4核的CPU,运行频率高于2GHz;
  • 至少12GB内存;
  • 至少40GB的可用磁盘空间;
1.1.1 安装 Ubuntu 和 VMware

强烈建议使用Ubuntu Linux 24.04.x LTS作为实验环境的主要操作系统。
安装镜像可以从以下链接下载:

Ubuntu 24.04.2下载链接

如果您使用的是 Microsoft Windows,请安装VMware,强烈推荐使用VMware Workstation Player 17.5.0 for Windows。该工具可以从以下链接下载:

VMware Workstation Player 17.5下载链接

1.1.2 检查虚拟化

VMware需要虚拟化指令以获得更高的性能,这对于OpenCV开发至关重要。打开Windows任务管理器(右键点击Windows任务栏,选择“任务管理器”),找到“性能”选项卡,点击“CPU”项并检查“虚拟化”项,如下所示。该项应显示“已启用”。
检查“虚拟化”
若显示“未启用”,请在文末查询解决措施

1.1.3 配置虚拟机

安装完 VMware Workstation 后,打开该软件按照以下配置设置一个新的虚拟机:

  • 2+ CPU核心(最好是(N-2)核心,N为CPU物理核心数);
  • 勾选 “虚拟化支持Intel VT-X/EPT或AMD-V/RVI” 选项以启用虚拟化指令加速;
  • 8GB+内存(最好是 >12GB内存,如果您使用更多CPU核心编译OpenCV,编译过程将需要大量内存);
  • 40GB磁盘空间(最好是60GB);
  • 将CDROM分配给Ubuntu Linux 24.04.x安装镜像(iso文件);
    启用虚拟化指令加速

启动虚拟机以开始安装过程。在安装过程的开始选择最小安装。

注意!新系统的语言必须选择英语。如果选择中文,系统将使用中文字符作为您的主目录名称,这会导致将代码放在工作目录下时出现严重问题。

1.2 在Ubuntu Linux下安装一些有用的工具

进入Ubuntu Linux桌面后,按 Ctrl+Alt+T 打开终端。
打开终端

1.2.1 apt 安装工具

使用apt安装我们需要的工具。必需的工具如下:

  • git
  • gcc
  • make
  • wget
  • unzip
  • g++
  • cmake
  • vim
sudo apt update
sudo apt install -y git gcc make wget unzip g++ cmake vim
1.2.2 下载VSCode

另一个有用的工具是Visual Studio Code(简称VSCode)。 可以从这里下载, 选择 “.deb” 包 .
以上操作均是在虚拟机中操作
VSCode下载

下载VSCode后,在终端中找到deb文件,然后使用以下命令安装:

cd ~/Downloads
sudo dpkg -i ./code_1.xxxxxx_amd64.deb

-i 后面为你的 deb 文件所在路径
注意:Ubuntu软件(Snap商店)也可能提供VSCode安装,但该版本在显示OpenCV图像窗口时存在严重问题。请使用VSCode官方网站的deb包进行安装!

安装完VSCode后,需要在VSCode中安装一些扩展:
C/C++ 扩展

点击 VSCode 左侧边栏中在这里插入图片描述图标,搜索 “ C/C++ Extension Pack” 并安装。该扩展包还包括 “ CMake ”和“ CMake Tools ” 扩展。

1.3 从源代码安装OpenCV、Eigen、Sophus、GeographicLib

注意:由于某些库需要其他包作为依赖项,请严格按照以下顺序安装软件包。

1.3.0 创建工作目录

首先,为我们的工作文件夹做准备。
打开 Linux 终端,使用以下命令创建工作目录。

mkdir -p ~/work/cv

该命令将在你的主目录下创建一个空白目录。
然后进入该工作目录:

cd ~/work/cv
1.3.1 安装Eigen

Eigen是一个用于许多计算机视觉应用的线性代数库。由于一些 OpenCV 额外模块依赖此库,因此应首先安装它。

进入~/work/cv,然后继续克隆Eigen源代码。使用以下命令:

git clone https://git.tongji.edu.cn/ipmv/mirrors/eigen.git

克隆完成后,执行以下命令:

cd eigen
mkdir -p build
cd build
cmake ..
make -j4
sudo make install
1.3.2 安装libgtk

libgtk是 OpenCV 在 Linux GUI上显示图像所需的库。在编译 OpenCV 之前安装libgtk

以下是详细步骤:

  • 安装libgtk2.0-dev
sudo apt install libgtk2.0-dev
  • 安装 libcanberra-gtk-module
sudo apt install libcanberra-gtk-module
1.3.3 安装vtk库并更新OpenCV

vtk库用于3D显示。

  1. 首先,安装 vtk 的依赖项,我们需要 OpenGL 库。使用以下命令安装:
sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev
  1. 下载vtk源代码并使用以下命令安装viz库:
cd ~/work/cv

git.tongji.edu.cn 下载vtk源代码

git clone https://git.tongji.edu.cn/ipmv/mirrors/kitware-vtk.git
  1. 切换到 v9.3.0
cd kitware-vtk
git checkout v9.3.0 
  1. 编译并安装
mkdir -p build
cd build
cmake ..
make -j4
sudo make install
1.3.4 安装 OpenCV 和 OpenCV-contrib

请注意,这些存储库包含这些项目的所有历史记录,当前(或HEAD)版本是最新的,但不适合我们的实验。我们需要选择指定的版本(或 git 系统中的BRANCH/TAG)。
使用以下命令克隆 OpenCV 源代码:

git clone https://git.tongji.edu.cn/ipmv/mirrors/opencv.git
cd opencv
git checkout 4.x

修改 OpenCV 的 CMakeLists 以兼容你安装的Eigen库:

修改~/work/cv/opencv 中的 CMakeLists.txt (你可以在终端中使用vim或在Ubuntu桌面环境中使用文本编辑器),在 CMakeLists.txt 文件的前面添加以下两行:

include_directories("/usr/local/include/eigen3")
set(CMAKE_CXX_STANDARD 17)

然后下载opencv-contrib源代码,这是 OpenCV 的额外库,我们稍后会使用这个库。
在文件夹中打开终端,例如~/work/cv,使用git克隆opencv-contrib源代码:

git clone https://git.tongji.edu.cn/ipmv/mirrors/opencv_contrib.git
cd opencv_contrib
git checkout 4.x

完成这些步骤后,准备编译 OpenCV:

cd ~/work/cv/opencv
mkdir -p build
cd build
cmake -DOPENCV_EXTRA_MODULES_PATH=~/work/cv/opencv_contrib/modules ..

等待cmake完成编译配置,你应该在cmake输出信息中看到GTK支持信息,如下所示:
cmake 编译配置完成显示

然后输入命令:

make -j4

注意:“-j4”表示使用 4 个线程编译代码,根据你在 VMware 设置中的 CPU 核心数调整此数字。此过程将持续半小时左右,请耐心等待。请注意,如果使用 8 个线程进行编译,将消耗约 8GB+ 的内存,需要确保 VMware 中的 Ubuntu Linux 有足够的内存。

编译完成后,使用以下命令安装二进制文件和头文件:

sudo make install

默认情况下,OpenCV 将安装到/usr/local目录,所有文件将复制到以下位置:

/usr/local/bin - executable files
/usr/local/lib - libraries (.so)
/usr/lib/cmake/opencv4 - cmake package
/usr/local/include/opencv4 - headers
/usr/local/share/opencv4 - other files (e.g. trained cascades in XML format)

请参考 https://docs.opencv.org/4.9.0/d7/d9f/tutorial_linux_install.html

1.3.5 安装fmt库

回到~/work/cv,然后继续克隆fmt源代码。使用以下命令:

git clone https://git.tongji.edu.cn/ipmv/mirrors/fmt.git

克隆完成后,执行以下命令:

cd fmt
mkdir -p build
cd build
cmake ..
make -j4
sudo make install
1.3.6 安装 Sophus

回到~/work/cv,然后继续克隆 Sophus 源代码。使用以下命令:

git clone -b 1.22.10 --single-branch https://git.tongji.edu.cn/image_pro_and_cv/example_code/Sophus.git

克隆完成后,执行以下命令:

cd Sophus
mkdir -p build
cd build
cmake ..
make -j4
sudo make install

如果出现如下编译错误:

Sophus源代码文件夹中找到 “so3.hpp” 文件(例如~/work/cv/Sophus/sophus/so3.hpp),使用文本编辑器编辑该文件。
将 include 行(第12-14行)从

#include <Eigen/src/Geometry/OrthoMethods.h>
#include <Eigen/src/Geometry/Quaternion.h>
#include <Eigen/src/Geometry/RotationBase.h>

修改为:

#include <Eigen/Geometry>

修改后,so3.hpp 文件应如下图所示:
修改后so3.hpp文件
如果遇到编译错误报告“array_bounds”或“maybe_uninitialized”,请修改CMakeLists.txt 以将警告级别从“错误”更改为“警告”。
在 CMakeLists.txt 中找到以下行:

  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -Wextra ......")

修改此行以添加 g++ 的额外标志,应如下所示:

  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -Wextra -Wno-maybe-uninitialized -Wno-array-bounds ......")

保存修改并重新运行 make -j4.

1.3.7 安装GeographicLib

回到~/work/cv,然后继续克隆 GeographicLib 源代码。使用以下命令:

git clone https://git.tongji.edu.cn/ipmv/mirrors/geographiclib.git

克隆完成后,执行以下命令:

cd geopraphiclib
mkdir -p build
cd build
cmake ..
make -j4
sudo make install

2 环境验证

编写一个 “Hello World” 项目来验证环境。

2.1 为你的第一个 OpenCV 项目创建工作空间

首先,为我们的项目创建一个空文件夹。

mkdir -p ~/work/lab0
cd ~/work/lab0

我们将使用CMake来管理项目,驱动编译器生成可执行程序。使用VSCode进行C++编码和调试。

使用搜索引擎或向DeepSeek寻求帮助,编写一个使用 OpenCV 的 C++ 演示项目,显示一个 GUI 窗口来展示 “Hello World”。内容应包括 “ Hello World ” 短语和你的学号或电子邮件地址。
在这里插入图片描述

2.2 向项目中添加源代码文件

在你的工作文件夹中添加一个名为“main.cpp”的新文件(例如~/work/lab0)。以下是该任务的示例:

#include "opencv2/opencv.hpp"

int main(int argc, char *argv[])
{
    cv::Mat image(240, 640, CV_8UC3, cv::Scalar(32,32,32));
    cv::putText(image, "Hello World",cv::Point(80,160),cv::FONT_HERSHEY_SIMPLEX,2,cv::Scalar(255,255,255),1,8,false);
    cv::imshow("Hello world", image);
    cv::waitKey(0);

    return EXIT_SUCCESS;
}

2.3 为项目添加 CMakeLists.txt

以下是用于编译控制的CMakeLists.txt文件:

cmake_minimum_required(VERSION 3.5.1)
project(hello_opencv)

set(compiler_options -Wall -Wextra -Wpedantic)

# 添加库
find_package(OpenCV 4 REQUIRED)

add_executable(${PROJECT_NAME}
  main.cpp     # 这里是你的源代码文件
  )

target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
target_compile_options(${PROJECT_NAME} PRIVATE ${compiler_options})
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON CXX_STANDARD 11)

2.3 如何在VSCode中使用CMake

  • 使用 Ctrl+Shift+P调出 VSCode 命令面板,输入 CMake:Configure 以调用 cmake 生成 makefiles.

  • 调出 VSCode 命令面板并输入 CMake:Build 以编译源代码。

  • 调出VSCode命令面板并输入CMake:Debug 以进入调试模式。

注意:VSCode 无法弹出 imshow() 的弹出窗口,你可以在工作目录下的“build”子目录中运行你的应用程序。

2.4 修改代码以满足 2.1 中的要求

使用 OpenCV 的在线手册、搜索引擎或 DeepSeek 帮助你理解 2.2 源代码中使用的 OpenCV 函数。明确以下函数或 OpenCV 类的参数:

cv::Mat
cv::putText()
#include "opencv2/opencv.hpp"
int main(int argc, char *argv[])
{
    cv::Mat image(240, 640, CV_8UC3, cv::Scalar(32, 32, 32));
    cv::putText(image, "Hello OpenCV!", cv::Point(80, 120), cv::FONT_HERSHEY_SIMPLEX, 2, cv::Scalar(255, 255, 255), 1, 8, false);
    cv::putText(image, "******@tongji.edu.cn", cv::Point(100, 200), cv::FONT_HERSHEY_SIMPLEX, 0.6, cv::Scalar(255, 255, 255), 1, 8, false);
    cv::imshow("Hello OpenCV!", image);
    cv::waitKey(0);
    return EXIT_SUCCESS;
}
}

运行结果:
在这里插入图片描述

3 函数解释

cv::Matcv::putText.

3.1 cv::Mat类构造函数

函数功能:存储矩阵(含图像)

cv::Mat image(240, 640, CV_8UC3, cv::Scalar(32,32,32));
  • 创建一个240px高、640px宽的灰色背景图像,其中颜色通道为BGR三通道。

  • 创建一个Mat 类型对象 image

  • 分配给它一个240 px 行、640 px 列的空间。

  • 数据类型是CV_8UC3,即3通道(C3)8 bit 的无符号整型(8U,unchar)。

  • 对矩阵(通道)进行初始化赋值,此处:B=32,G=32,R=32。

参数说明

参数顺序参数示例含义
1240图像高度
2640图像宽度
3CV_8UC3数据类型与通道数
8U = 8位无符号数
C3 = 3个颜色通道(BGR)
4cv::Scalar(32, 32, 32)初始化颜色

3.2 cv::putText函数

函数功能:在图像中某一位置显示文字

cv::putText(image, "Hello World", 
			cv::Point(80,160), cv::FONT_HERSHEY_SIMPLEX, 
			2, cv::Scalar(255,255,255), 1, 8, false);

image 图像的(80, 160) 位置绘制白色的 “Hello World” 文本,使用简单的字体(FONT_HERSHEY_SIMPLEX),大小为默认的两倍,线条粗细为 1,并且从左上角开始绘制。

参数说明

参数顺序参数示例含义
1image显示文字所在图像
2“Hello World”显示文字字符串
3cv::Point(80,160)文字显示位置(坐标)
4cv::FONT_HERSHEY_SIMPLEX字体类型
52文本缩放因子,文字大小
6cv::Scalar(255,255,255)文本颜色(默认BGR通道)
71文本线条粗细
88Line Type线性线条类型
此处表示使用8-连通线,标准抗锯齿线条
9false图像原点位置左上角(true:左下角)

4 问题与常见问题解答

  • 由于旧版本的OpenCV(例如3.x)与C++17不兼容,强烈建议使用新版本。如果你想使用旧版本,请安装g++ 9.x。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值