当前位置: 首页 > news >正文

第四节:OpenCV 基础入门-第一个 OpenCV 程序:图像读取与显示

一、引言:为什么选择 OpenCV?

在计算机视觉领域,OpenCV(Open Source Computer Vision Library)是一个开源的、跨平台的计算机视觉库,广泛应用于图像处理、模式识别、机器学习等领域。它支持多种编程语言(如 Python、C++、Java),并提供了超过 2500 种优化算法。对于初学者而言,图像读取与显示是接触 OpenCV 的第一个核心步骤。本文将手把手教你实现这一过程,并深入解析背后的技术细节。

二、环境准备:安装 OpenCV
1. Python 环境配置
  • 确保已安装 Python(推荐 3.6 以上版本)。

  1. 使用 pip 安装 OpenCV-Python 包:

    pip install opencv-python

    若需额外功能(如深度神经网络模块),可安装完整版:

    pip install opencv-contrib-python
    2. 验证安装

    在 Python 环境中输入以下代码,若无报错则安装成功:

    import cv2
    print(cv2.__version__)  # 应输出 OpenCV 版本,如 4.5.5
    三、第一个程序:图像读取与显示
    1. 完整代码示例
    import cv2# 读取图像
    image = cv2.imread("path/to/your/image.jpg")# 检查图像是否成功加载
    if image is None:print("错误:无法读取图像!请检查文件路径。")
    else:# 显示图像cv2.imshow("My First OpenCV Window", image)cv2.waitKey(0)          # 等待用户按下任意键cv2.destroyAllWindows() # 关闭所有窗口
    2. 代码逐行解析
  2. 导入库

    import cv2:导入 OpenCV 的 Python 接口库。

  3. 读取图像

    cv2.imread() 是 OpenCV 的图像读取函数:

    1. 参数:图像文件的路径(支持 JPEG、PNG、BMP 等格式)。

    2. 返回值:一个 NumPy 数组,存储图像的像素数据。如果读取失败(如路径错误),返回 None

      image = cv2.imread("image.jpg")  # 默认以彩色模式(BGR)加载
      image_grayscale = cv2.imread("image.jpg", cv2.IMREAD_GRAYSCALE)  # 灰度模式
  4. 错误处理

    通过检查 image 是否为 None,避免后续操作崩溃。

  5. 显示图像

    cv2.imshow() 创建窗口并显示图像:

    1. 第一个参数:窗口名称(必须是唯一的)。

    2. 第二个参数:要显示的图像数据。

  6. 等待按键

    cv2.waitKey(0) 会暂停程序,直到用户按下任意键。参数为等待时间(毫秒),0 表示无限等待。

  7. 释放资源

    cv2.destroyAllWindows() 关闭所有 OpenCV 创建的窗口,防止内存泄漏。

  8. 四、关键问题与调试技巧
    1. 图像路径问题
  • 相对路径 vs 绝对路径

    • 若图像与代码文件在同一目录,直接使用文件名(如 "cat.jpg")。

    • 跨目录时需使用正确路径(如 "../images/cat.jpg")。

  • 路径中的转义字符
    在 Windows 中,路径应使用双反斜杠或原始字符串:

    image = cv2.imread("C:\\Users\\Desktop\\image.jpg")
    或
    image = cv2.imread(r"C:\Users\Desktop\image.jpg")
    2. 窗口一闪而过?
  • 原因:未使用 cv2.waitKey() 或参数值过小(如 cv2.waitKey(1) 仅等待 1 毫秒)。

  • 解决方案:设置合理的等待时间,例如 cv2.waitKey(5000) 等待 5 秒。

  • OpenCV 默认以 BGR 格式(而非 RGB)加载彩色图像。若需用其他库(如 Matplotlib)显示,需转换颜色空间:

    image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    五、功能扩展:更灵活的图像操作
    1. 调整窗口大小

    默认窗口无法缩放,可通过以下方式创建可调整窗口:

    cv2.namedWindow("Window", cv2.WINDOW_NORMAL)  # 允许调整大小
    cv2.imshow("Window", image)
  • 2. 保存图像

    使用 cv2.imwrite() 保存处理后的图像:

    cv2.imwrite("output.jpg", image)  # 支持 JPEG、PNG 等格式
    3. 显示多窗口

    同时显示原始图像和灰度图像:

    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    cv2.imshow("Color Image", image)
    cv2.imshow("Gray Image", gray_image)
    cv2.waitKey(0)
    六、深入理解:图像在内存中的表示
  • 像素矩阵:图像被存储为三维 NumPy 数组:

    • 彩色图像:形状为 (高度, 宽度, 3),3 个通道(B、G、R)。

    • 灰度图像:形状为 (高度, 宽度)

  • 访问像素值
    通过坐标访问特定像素:

    pixel_value = image[y, x]  # 注意:先行(y)后列(x)

    修改像素
    直接修改数组元素:

    image[100:200, 200:300] = [0, 0, 255]  # 将区域设置为红色
  • 七、常见问题 FAQ
  1. OpenCV 支持哪些图像格式?

    支持 JPEG、PNG、TIFF、BMP 等常见格式。具体取决于编译时的配置。

  2. 如何解决 cv2.imshow() 在 Jupyter Notebook 中不显示图像?

    建议在本地 Python 环境中运行,或在 Jupyter 中使用 matplotlib 显示:

    import matplotlib.pyplot as plt
    plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
    plt.show()
  3. 为什么窗口关闭后程序不退出?

    确保在代码末尾调用了 cv2.destroyAllWindows()

    八、结语

    通过本文,你不仅学会了如何用 OpenCV 读取和显示图像,还掌握了错误处理、路径调试、像素操作等进阶技巧。这些知识是后续学习图像处理(如滤波、边缘检测、目标识别)的基础。下一步,可以尝试为程序添加以下功能:

  • 通过摄像头实时捕获视频

  • 在图像上绘制几何图形

  • 实现简单的滤镜效果

相关文章:

  • HTML5实战指南:语义化标签与表单表格高级应用
  • Spring Cloud Gateway路由+断言+过滤
  • 【毕设通关】——Word交叉引用
  • process terminated with status -1073741515
  • 前端面试宝典---性能优化
  • Javase 基础加强 —— 01 异常
  • Vue 路由(Vue Router)详解:轻松实现单页应用导航
  • llfc项目分布式服务笔记
  • VSCode搭建STM32开发调试环境
  • PostgreSQL 查看索引碎片的方法
  • Git 入门指南:下载与初步认识
  • 多模态大语言模型arxiv论文略读(五十九)
  • React-router v7 第七章(导航)
  • 【leetcode100】最长递增子序列
  • 大数据实时数仓的数据质量监控解决方案
  • TS 类型别名
  • [MATLAB]通过50个MATLAB程序理解信号与系统的核心概念
  • K8S的使用(部署pod\service)+安装kubesphere图形化界面使用和操作
  • Go Web 后台管理系统项目详解
  • AI入门:Prompt提示词写法
  • 特朗普:对所有在国外制作进入美国的电影征收100%关税
  • 新华社:让历史照鉴未来
  • 贵州黔西市载人游船倾覆事故已致3人遇难,14人正在搜救中
  • 普京称俄中关系对维护世界稳定具有战略意义
  • 德国斯图加特发生车辆冲撞人群事件,至少三人受伤
  • 11家券商一季度净利翻番:9家利润超20亿,国泰海通居首