Skip to the content.

一、实验背景与目的 本次实验在 Docker 容器化的 Ubuntu 环境中,完成 OpenCV 库的安装与基础图像读取、显示操作,掌握 OpenCV 在 Python 环境中的基础使用方法,验证容器化环境下计算机视觉开发工具链的可用性,为后续图像处理与 ROS 视觉项目开发奠定基础。 二、实验环境与过程

  1. 实验环境 宿主系统:Windows 11 容器环境:Docker + Ubuntu 24.04 开发工具:Python 3、OpenCV 库(opencv-python/opencv-contrib-python)、NumPy 库 图形界面:容器通过浏览器桌面(127.0.0.1:16080)实现 GUI 显示
  2. 实验步骤 安装依赖库: bash 运行

    安装OpenCV与扩展模块

    pip install opencv-python opencv-contrib-python

    安装指定版本NumPy,避免兼容性问题

    pip install “numpy<2” 准备测试图像:将cat.jpg测试图片放入容器的工作目录中。 编写 Python 脚本(sht.py):实现图像读取与显示功能: python 运行 import cv2

读取图像

img = cv2.imread(“cat.jpg”)

显示图像

cv2.imshow(“Figure 1”, img)

等待按键输入,防止窗口直接关闭

cv2.waitKey(0) cv2.destroyAllWindows() 运行脚本并调试:在终端执行python3 sht.py,解决路径错误问题后,成功弹出显示猫咪图像的窗口。 三、实验现象与问题分析

  1. 核心现象 OpenCV 图像读取与显示成功:运行脚本后,弹出名为Figure 1的窗口,成功显示cat.jpg猫咪图像,说明 OpenCV 库安装正常,图像读取与显示功能工作正常。 路径错误问题解决:首次运行时出现Errno 2: No such file or directory错误,原因是终端当前工作目录与脚本、图像文件所在目录不一致,切换到正确路径后脚本正常运行。
  2. 原理与问题分析 OpenCV 图像读取原理:cv2.imread()函数以 BGR 格式读取图像文件,返回 NumPy 数组形式的像素数据;cv2.imshow()函数创建窗口并渲染图像数据,cv2.waitKey(0)用于保持窗口显示,直到用户按下任意键。 容器化环境的图形支持:通过浏览器桌面访问 Docker 容器,解决了传统服务器环境下 OpenCV 无法弹出 GUI 窗口的问题,验证了容器化环境对计算机视觉开发的完整支持。 常见错误分析: 文件路径错误:脚本运行时的工作目录必须与图像文件所在目录一致,或使用绝对路径指定文件位置,否则会出现文件找不到的错误。 依赖版本兼容性:使用numpy<2版本是为了避免 OpenCV 与 NumPy 2.0 + 版本的兼容性问题,保证图像数组操作的稳定性。 四、实验结论 在 Docker 容器化的 Ubuntu 环境中,可成功安装并运行 OpenCV 库,实现图像读取与显示的基础功能,为后续计算机视觉开发提供了稳定的容器化环境。 OpenCV 的基础图像操作依赖文件路径的正确性与依赖库的版本兼容性,开发过程中需注意路径管理与依赖版本匹配。 容器化环境通过浏览器桌面的方式支持 GUI 应用,可满足 OpenCV、RViz 等可视化工具的运行需求,为视觉相关 ROS 项目开发提供了便捷的环境方案。 五、实验心得(补充版) 从环境搭建到功能验证的完整流程:本次实验完整覆盖了 OpenCV 的安装、依赖配置、脚本编写与调试的全过程,让我熟悉了 Python 环境下计算机视觉开发的基础流程,也体会到容器化环境在开发环境一致性保障上的优势。 细节决定成败:路径与依赖的重要性:实验中因路径不一致导致的报错,让我意识到开发中文件路径管理的重要性;而 NumPy 版本的限制,则让我体会到依赖库兼容性问题对项目的影响,这些细节都是后续开发中需要重点关注的问题。 OpenCV 在 ROS 项目中的应用价值:OpenCV 作为计算机视觉领域的核心库,可与 ROS2 结合实现相机图像读取、目标检测、图像预处理等功能,本次实验的基础操作,为后续 ROS 视觉项目的开发打下了坚实基础。 后续拓展方向:后续可基于 OpenCV 实现图像灰度化、边缘检测、特征匹配等进阶图像处理功能,或结合 ROS2 话题通信,实现相机图像的实时处理与发布,进一步探索计算机视觉在机器人项目中的应用。