本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:本文介绍了如何在树莓派上安装OpenCV 3.4.1版本,并通过C++语言进行测试。OpenCV是一个在图像处理和计算机视觉领域广泛使用的开源库。安装过程涵盖了系统准备、安装依赖、获取源码、配置编译、验证安装和运行测试程序等步骤。完成安装后,通过提供的测试例程,用户可以实践OpenCV的基础操作,加深对库的理解,并在树莓派这样的嵌入式平台上开发相关应用。
树莓派

1. 树莓派上安装OpenCV 3.4.1

简介

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。安装OpenCV 3.4.1到树莓派上可以为开发者提供一个低成本、高效的开发平台,实现各种视觉和图像处理项目。本章节将介绍如何在树莓派上成功安装OpenCV 3.4.1。

树莓派环境要求

在安装OpenCV之前,需要确认你的树莓派已满足最低配置要求,推荐使用至少4GB的SD卡来安装Raspberry Pi OS。确保树莓派的电源供应充足,以避免在安装过程中出现中断。

安装步骤

  1. 首先,你需要获取最新版本的Raspberry Pi OS。可以通过Raspberry Pi官方网站下载相应的镜像文件。
  2. 使用Raspberry Pi Imager工具将下载的镜像文件写入SD卡。
  3. 插入SD卡到树莓派,连接HDMI显示器,插入键盘和鼠标,并接通电源启动树莓派。
  4. 在首次启动后,进行初始设置,包括配置网络、更新系统等。
  5. 执行系统更新,打开终端并运行以下命令以确保系统是最新的:
sudo apt-get update
sudo apt-get upgrade

通过以上步骤,树莓派就准备好了安装OpenCV 3.4.1的环境。接下来,我们将继续进行系统更新与配置的详细步骤,确保系统环境稳定可靠。

2. 系统准备与更新

2.1 树莓派操作系统的安装

2.1.1 下载Raspberry Pi OS

对于树莓派而言,选择一个适合的系统镜像是启动开发之旅的关键一步。Raspberry Pi OS(之前称为Raspbian)是专为树莓派硬件优化的操作系统,它提供了良好的支持和丰富的资源,是学习和开发的首选。访问 Raspberry Pi 官网 ,您将发现多种版本的镜像文件。Raspberry Pi OS有两个不同的版本可供下载:基础版(Lite)和完整版。基础版适合那些不需要桌面界面的开发者,而完整版包含了一个基于X桌面环境的用户界面。

下载适合您树莓派硬件版本的镜像文件。确保下载适合您设备的32位或64位版本,因为这会直接影响您的硬件性能和兼容性。

2.1.2 树莓派系统安装流程

安装树莓派操作系统通常涉及到以下步骤:

  1. 将下载好的操作系统镜像文件解压。使用解压工具提取出 .img 文件。
  2. 使用 Etcher Win32DiskImager 或者 dd 命令等工具将 .img 文件烧录到SD卡或microSD卡中。
  3. 将SD卡插入树莓派,并连接到电源启动设备。
  4. 第一次启动后,树莓派会自动扩展文件系统以填充整个SD卡,并设置默认的用户名和密码(默认为 pi raspberry )。
  5. 完成初始设置后,您可以通过在终端中运行 sudo raspi-config 来进一步配置系统。

确保在安装过程中检查网络连接,因为一些后续步骤将需要连接到互联网。

2.2 系统更新与配置

2.2.1 更新软件包列表

在安装了操作系统之后,您应该更新系统软件包列表,以确保您可以获得最新的软件版本和安全补丁。打开终端并运行以下命令来更新软件包列表:

sudo apt update

这个命令会从配置的源下载软件包列表的索引文件,更新您的本地数据库,而不会升级或安装任何软件包。

2.2.2 升级系统软件包

软件包列表更新后,下一步是升级所有已安装的软件包到最新版本。运行以下命令来执行此操作:

sudo apt full-upgrade -y

这个命令会检查所有已安装的软件包,并尝试升级到最新版本。选项 -y 会自动同意安装任何新配置文件而不提示用户。

2.2.3 配置系统环境变量

环境变量是影响系统运行的全局变量,例如路径设置等。为了便于使用OpenCV等库,您可能需要设置或更新环境变量。可以通过编辑用户的 .bashrc .profile 文件来设置环境变量:

nano ~/.bashrc

在打开的编辑器中,您可以添加如下行来设置环境变量:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

保存并关闭文件。为了使更改生效,您需要重新加载 .bashrc 文件:

source ~/.bashrc

这将允许系统识别新安装的库文件路径,从而在编译和运行依赖于这些库的程序时不会出现找不到库文件的问题。

完成这些步骤之后,您的树莓派系统就准备好安装OpenCV了。接下来的章节将详细指导您如何安装OpenCV的依赖项,准备系统以支持复杂的库和应用程序。

3. 安装OpenCV依赖项

3.1 安装依赖项前的系统优化

3.1.1 调整交换空间大小

交换空间(swap space)是计算机内存(RAM)的扩展,当物理内存不够用时,操作系统会使用硬盘上的交换空间。由于树莓派通常拥有有限的RAM,合理配置交换空间可以帮助避免程序运行时因内存不足而被系统终止。

对于树莓派,推荐的交换空间大小为物理内存的1.5至2倍。可以通过以下命令调整交换空间的大小:

# 创建交换空间文件
sudo dd if=/dev/zero of=/swapfile bs=1024 count=512k

# 设置交换空间文件的权限
sudo chmod 600 /swapfile

# 激活交换空间
sudo mkswap /swapfile

# 配置系统在启动时自动挂载交换空间
sudo echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
3.1.2 配置系统的编译工具链

在开始安装OpenCV之前,需要确保树莓派已经安装了必要的编译工具链。这通常包括GCC编译器、make工具、CMake以及一些基础的开发库。

运行以下命令来安装所有需要的软件包:

sudo apt-get update
sudo apt-get install build-essential cmake pkg-config

3.2 安装CMake和库依赖

3.2.1 安装CMake工具

CMake是一个跨平台的自动化构建系统,可以简化编译过程。由于OpenCV的编译依赖于CMake,所以必须先安装它。

树莓派官方仓库中的CMake版本可能不是最新的,推荐安装预编译的二进制包:

sudo apt-get install cmake

安装完成后,可以使用 cmake --version 命令来验证安装版本。

3.2.2 安装OpenCV编译所需的库依赖

OpenCV的编译过程需要一些额外的库依赖。以下是一些基本的依赖项,它们对于大多数OpenCV功能都是必需的:

sudo apt-get install libjpeg-dev libtiff-dev libjasper-dev libpng-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libatlas-base-dev gfortran

对于计算机视觉项目,可能还需要其他依赖,例如用于处理视频文件的库,或者用于图形用户界面(GUI)的库。

3.3 系统优化与依赖项安装的综合分析

在安装OpenCV之前,对树莓派系统进行优化和安装必要的编译依赖项是至关重要的。优化交换空间大小可以提高系统在资源限制下的性能,而安装一个全面的编译工具链则是构建OpenCV的先决条件。在实际操作过程中,应该注意以下几点:

  1. 交换空间的大小 :过小的交换空间可能会导致系统在内存使用高峰时出现性能瓶颈,而过大的交换空间又可能会导致树莓派的存储设备过早磨损。因此,需要根据实际的内存使用情况和存储设备的性能来合理配置。

  2. 编译工具链的选择 :安装官方仓库中的预编译二进制包通常可以提供稳定的CMake版本,但是有些开发者可能更喜欢从源码开始编译安装。在选择安装方式时,应该考虑到编译过程可能需要较长的时间以及较高的系统资源消耗。

  3. 库依赖的管理 :为了确保OpenCV的安装和运行不受版本冲突影响,推荐使用系统包管理器安装依赖库。此外,更新系统的软件包列表和升级软件包可以确保依赖库是最新版本,避免潜在的兼容性问题。

在安装完依赖项后,我们将进入OpenCV源码的克隆和配置阶段。这是整个安装过程中的关键环节,需要仔细按照步骤进行以确保所有依赖项都正确无误。接下来,我们将详细探讨如何从源码开始,一步步构建OpenCV。

4. 克隆OpenCV源码

4.1 选择OpenCV版本

4.1.1 访问OpenCV官方GitHub

OpenCV的源代码托管在GitHub上,提供了一个集中的资源中心供开发者访问。访问 OpenCV官方GitHub仓库 是获取最新版本的OpenCV源代码的第一步。通过这个仓库,开发者可以看到各个版本的更改日志、功能更新、贡献者信息以及社区讨论,有助于决定选择哪一个版本进行克隆。

4.1.2 选择合适的OpenCV版本进行克隆

选择合适的OpenCV版本需要考虑以下几点因素:
- 稳定性和支持 :长期支持(LTS)版本通常得到较长时间的更新和补丁支持,适合需要稳定性的项目。
- 功能需求 :检查新版本的更新日志,确认是否有你需要的最新功能或者性能改进。
- 兼容性 :新版本可能会带来API的变动,需要确认这些变动是否与你的现有代码兼容。

一旦确定了要克隆的版本,可以使用Git命令来克隆所需的版本到本地工作目录中。

4.2 OpenCV源码克隆操作

4.2.1 使用Git克隆OpenCV源码

克隆OpenCV源码需要使用Git客户端。首先确保系统上已经安装了Git。在命令行界面中,可以使用以下命令进行克隆:

git clone https://github.com/opencv/opencv.git
cd opencv

该命令会将OpenCV的代码库克隆到当前目录下的 opencv 文件夹中。

4.2.2 克隆过程中的常见问题及解决

在克隆过程中可能会遇到一些问题,例如网络问题导致克隆失败、权限问题或者磁盘空间不足等。针对这些问题的常见解决方法如下:

  • 网络问题 :如果在克隆过程中遇到网络问题,可以尝试更换网络环境或者使用代理。例如,添加一个GitHub的官方代理:
git config --global http.proxy http://proxy_user:proxy_password@proxy.server.com:port
  • 权限问题 :如果遇到权限问题,使用 sudo 命令重新克隆或配置Git代理可能会有帮助:
sudo git clone https://github.com/opencv/opencv.git
  • 磁盘空间不足 :确保系统有足够的磁盘空间来存储OpenCV源码。在树莓派上,这可能意味着需要安装一个更大的SD卡或者清理不必要的文件。

在克隆完成后,还可以通过以下命令检查OpenCV代码库的状态,确保一切正常:

git status

在本章节中,我们介绍了访问OpenCV官方GitHub仓库以及选择和克隆OpenCV源码的过程。下一章节将围绕如何配置和编译OpenCV进行详细阐述。

5. 配置和编译OpenCV

安装OpenCV的过程在某种程度上是一种仪式,对于希望深入学习计算机视觉或图像处理领域的开发者来说,它象征着技术掌握的一个重要里程碑。在本章节中,我们将详细了解如何配置OpenCV的编译选项,并最终编译出这个强大的库。这是一段技术的旅程,它将带领我们从配置源码到处理编译过程中可能遇到的困难。

5.1 配置OpenCV编译选项

在树莓派上成功安装了所有依赖项后,下一步是配置OpenCV的编译选项。这个步骤通常利用CMake工具来完成,它允许我们指定编译环境以及相应的选项,确保我们可以得到一个定制化的OpenCV版本。

5.1.1 使用CMake配置OpenCV

配置OpenCV的过程相对简单,但它在我们的安装旅程中占据了一个至关重要的位置。这个过程将根据我们的具体需求选择性地启用或禁用某些功能模块。

首先,打开终端并导航到我们之前克隆的OpenCV源码目录下:

cd /path/to/opencv

然后,我们可以使用CMake的命令行工具来启动配置过程。一个典型的基础配置命令如下:

mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

上面的命令做了以下几件事情:

  • mkdir build 创建一个名为build的新目录,我们将在其中进行编译。
  • cd build 进入build目录。
  • cmake 是CMake工具的命令行调用。
  • -D CMAKE_BUILD_TYPE=RELEASE 设置构建类型为Release模式,这是发布模式,会进行更高级的优化。
  • -D CMAKE_INSTALL_PREFIX=/usr/local 指定安装路径,这里设置为常用的/usr/local目录。
  • .. 表示CMake配置文件位于当前目录的上一级目录,即opencv源码目录。

在配置过程中,CMake会根据当前系统环境自动检测依赖情况,并生成相应的Makefile文件,供下一步使用。

5.1.2 配置过程中的自定义选项

OpenCV提供了大量的配置选项供用户自定义。CMake配置选项通常由两部分组成,一部分是用于启用或禁用某些特定模块的选项,另一部分是用于设置不同功能的变量。

假设我们想要编译并启用OpenCV中的视频处理模块,可以添加 -D WITH_V4L=ON 到CMake命令中。而如果想要启用OpenCV的图形用户界面支持,则可以加入 -D WITH_QT=ON

在配置阶段,我们可以检查CMake输出的信息,确保我们想要的功能模块和选项已经正确地被选中。如果需要修改某些设置,只需重新运行CMake命令并加入或去除相应的选项即可。

5.2 编译OpenCV

配置完成后,编译OpenCV本身是一个相对直白的过程。不过,由于树莓派的硬件资源相对有限,这个步骤可能会需要较长的时间。

5.2.1 开始编译过程

在CMake成功完成配置后,编译过程就变得相当简单了。我们只需要在终端中运行以下命令:

make -j4

这个命令告诉系统使用4个线程来并行编译OpenCV。 -j 参数后面的数字代表了并行任务的数量,这个数字通常取决于你的CPU核心数。在树莓派上,选择合适的数字可以显著加快编译速度,但过高的数字可能会导致系统资源竞争,导致编译速度反而下降。

5.2.2 处理编译中可能出现的问题

在编译过程中,可能会出现各种各样的问题。最常见的问题之一是由于内存不足导致的编译失败。由于树莓派的内存可能比较有限,我们在编译时可能需要手动分配更多的交换空间。

如果在编译过程中遇到了错误,通常CMake会提供错误信息。一个例子如:

[ 34%] Building CXX object modules/features2d/CMakeFiles/opencv_features2d.dir/src/detectors.cpp.o
In file included from /home/pi/opencv/modules/features2d/src/detectors.cpp:11:
/home/pi/opencv/modules/features2d/include/opencv2/features2d/features2d.hpp:49:38: fatal error: eigen/dense: No such file or directory
compilation terminated.
make[2]: *** [modules/features2d/CMakeFiles/opencv_features2d.dir/src/detectors.cpp.o] Error 1
make[1]: *** [modules/features2d/CMakeFiles/opencv_features2d.dir/all] Error 2
make: *** [all] Error 2

上面的错误提示表明编译过程中缺少Eigen库的引用。此时,我们需要检查Eigen库是否正确安装在系统上,或者是否在CMake配置过程中正确地指定了Eigen库的路径。

另一个常见的问题是由于依赖库版本不兼容或缺失导致的编译失败。如果遇到这样的问题,需要检查是否安装了所有必需的依赖项,并且它们的版本是否符合OpenCV的编译要求。

编译完成后,我们可以使用 make install 命令将编译好的OpenCV安装到系统中指定的路径下。这个步骤将会复制编译好的库文件到 /usr/local/lib 目录,并将头文件复制到 /usr/local/include/opencv4 目录。

sudo make install

安装后,OpenCV就被成功安装到树莓派上了。接下来的章节,我们将讨论如何验证安装的成功以及如何编写和运行简单的测试程序。

6. 验证OpenCV安装

6.1 安装验证

6.1.1 使用命令行验证OpenCV安装

在完成了OpenCV的编译和安装步骤之后,我们需要确保一切正常工作。一个快速验证安装的方法是使用命令行工具。在Linux系统中,可以利用pkg-config工具来检查OpenCV是否已经正确安装。请打开您的终端,并输入以下命令:

pkg-config --modversion opencv4

如果您看到类似于 3.4.1 的输出,这意味着OpenCV已经被正确安装。 opencv4 在这里指明我们检查的是OpenCV 4.x版本。如果您安装的是不同版本的OpenCV,请相应地更改命令中的版本号。

6.1.2 检查OpenCV库文件和头文件

验证安装的另一个重要步骤是检查OpenCV的库文件和头文件是否存在于正确的路径。这可以通过 locate 命令来完成,该命令能帮助您快速找到文件的位置。输入以下命令:

locate opencv

此命令的输出应该列出很多包含“opencv”的路径,例如 /usr/local/lib/libopencv_*.so (动态链接库文件)和 /usr/local/include/opencv4/opencv2 (头文件)。注意,库文件和头文件的确切路径可能会根据您的安装配置而有所不同。

6.2 配置环境变量

6.2.1 设置OpenCV库的环境变量

为了使系统能够找到OpenCV的库文件,需要设置环境变量。在Linux中,这通常是通过编辑 ~/.bashrc ~/.bash_profile 文件来完成的。使用您喜欢的文本编辑器,打开其中一个文件,并添加以下两行:

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

这两行代码分别添加了OpenCV库文件和pkg-config配置文件到相应的环境变量中。保存文件并执行以下命令来使更改生效:

source ~/.bashrc

或者,如果您编辑的是 ~/.bash_profile 文件:

source ~/.bash_profile

6.2.2 验证环境变量配置

为了验证环境变量是否已正确设置,可以使用 echo 命令来打印环境变量的值:

echo $LD_LIBRARY_PATH
echo $PKG_CONFIG_PATH

这两个命令应该分别输出了包含 /usr/local/lib 的路径和 /usr/local/lib/pkgconfig 的路径。如果看到这些输出,这意味着您已经正确配置了OpenCV所需的环境变量。如果这些输出不正确,请回顾并修正前面添加环境变量的步骤。

检查图像处理功能

为了进一步验证OpenCV是否安装成功并且功能正常,可以使用一些基本的图像处理操作。例如,以下是一段简单的C++代码,它读取一张图片,将其转换为灰度图像,然后保存结果。请确保在运行以下代码之前,您已经安装了OpenCV,并且已经正确设置了环境变量。

首先,创建一个名为 main.cpp 的文件,并将以下代码粘贴进去:

#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    cv::Mat image = cv::imread("path/to/image.jpg");
    if (image.empty()) {
        std::cout << "Could not open or find the image" << std::endl;
        return -1;
    }

    cv::Mat grayImage;
    cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);

    cv::imwrite("gray_image.jpg", grayImage);
    std::cout << "Gray Image Saved" << std::endl;
    return 0;
}

在终端中,确保您位于该文件所在的目录,然后编译它:

g++ main.cpp -o image_processor `pkg-config --cflags --libs opencv4`

这段命令会调用pkg-config来获取编译OpenCV程序所需的所有标志和链接库。如果编译成功,没有错误消息,那么运行生成的可执行文件:

./image_processor

如果一切正常,您将看到一个名为 gray_image.jpg 的新文件在相同的目录中。这个简单的程序验证了OpenCV的图像读取、处理(颜色空间转换)和图像保存功能。

以上这些步骤提供了一种方法,通过实际的图像处理任务来验证OpenCV安装的完整性和功能可用性。如果所有步骤都能顺利执行,那么可以确定OpenCV安装成功并且工作正常。

7. C++测试例程代码示例

在本章节中,我们将关注如何创建和运行一个简单的C++测试例程来验证OpenCV的安装。这个例程将包括使用OpenCV库读取一张图片并显示出来。我们将详细解析代码的各个部分,并讨论如何将这样的测试用例应用到实际项目中。

7.1 测试例程的编译和运行

7.1.1 编写简单的测试程序

首先,创建一个名为 test_opencv.cpp 的C++源文件,并输入以下代码:

#include <opencv2/opencv.hpp>
#include <iostream>

int main(int argc, char** argv) {
    if (argc != 2) {
        std::cout << "Usage: " << argv[0] << " <Image file>\n";
        return -1;
    }

    cv::Mat image = cv::imread(argv[1], cv::IMREAD_COLOR);
    if (image.empty()) {
        std::cout << "Could not open or find the image\n";
        return -1;
    }

    cv::namedWindow("Display window", cv::WINDOW_AUTOSIZE);
    cv::imshow("Display window", image);

    cv::waitKey(0); // Wait for a keypress
    return 0;
}

此代码段首先包含了OpenCV库的头文件,然后定义了主函数。它接受一个命令行参数,即要显示的图片的路径。如果图片成功加载,它将使用OpenCV的 imshow 函数显示图片,并等待用户按键后退出。

7.1.2 编译和执行测试程序

为了编译这个程序,你需要使用g++编译器并且链接OpenCV库。如果你已经正确安装了OpenCV并且设置了环境变量,编译命令可能如下所示:

g++ -o test_opencv test_opencv.cpp `pkg-config --cflags --libs opencv4`

如果一切顺利,编译将成功完成并且生成一个名为 test_opencv 的可执行文件。要运行这个测试程序,你需要传递一个图片文件作为参数:

./test_opencv path/to/your/image.jpg

如果图片文件存在且路径正确,你的图片将会显示在一个窗口中。

7.2 例程解析与应用

7.2.1 分析测试代码的运行结果

在测试程序运行时,首先需要确保提供的图片路径正确无误,图片文件应当存在于指定位置。程序运行后,一个窗口将打开并显示出提供的图片。如果图片没有成功显示,则可能需要检查几个方面:

  • 图片路径是否正确。
  • OpenCV库是否正确安装和配置。
  • 程序编译是否正确使用了OpenCV的链接器标志。

7.2.2 探讨测试例程在实际项目中的应用

这个简单的测试例程能够让我们确认OpenCV库安装正确,并且我们可以使用其功能。在实际项目中,类似的代码可以用来展示摄像头实时视频流、处理图像数据、执行计算机视觉算法等等。

例如,在一个自动化监控系统中,我们可以读取摄像头的实时视频流并检测视频帧中是否有移动物体或者识别特定对象。这可以作为开发复杂功能的基础,比如自动计数进入某个区域的人数、车辆识别或者安全监控系统。

在项目的开发过程中,测试例程的编写应遵循模块化和可复用原则,使得每个代码片段都是独立且易于维护的。这样,代码可以被组合起来构建更复杂的应用程序。在开发过程中,适当的代码版本控制和文档记录也是必不可少的,这有助于管理开发的进度和维护代码库。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:本文介绍了如何在树莓派上安装OpenCV 3.4.1版本,并通过C++语言进行测试。OpenCV是一个在图像处理和计算机视觉领域广泛使用的开源库。安装过程涵盖了系统准备、安装依赖、获取源码、配置编译、验证安装和运行测试程序等步骤。完成安装后,通过提供的测试例程,用户可以实践OpenCV的基础操作,加深对库的理解,并在树莓派这样的嵌入式平台上开发相关应用。


本文还有配套的精品资源,点击获取
menu-r.4af5f7ec.gif

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐