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

使用 OpenCV 读取和显示图像与视频

概述

OpenCV 是一个强大的计算机视觉库,广泛应用于图像处理和视频处理等领域。本文将详细介绍如何使用 OpenCV 在 Python 中读取和显示图像以及视频,并通过具体的代码示例来展示整个过程。

环境准备

在开始之前,请确保已经安装了 OpenCV 库。如果没有安装,可以通过以下命令进行安装:

pip install opencv-python
完整代码
import cv2


def read_img():
    """
    读取图片
    :return:
    """
    img = cv2.imread(r'./resources/lena.jpeg')
    cv2.imshow('lena img', img)
    cv2.waitKey(0)


def read_video():
    """
    读取视频/摄像头
    :return:
    """
    # 视频路径为获取资源,id序号则为摄像头id,0为默认第一个摄像头id
    cap = cv2.VideoCapture(r'./resources/video.mp4')
    # cap = cv2.VideoCapture(0)
    # cap propId 0-18
    cap.set(3, 800)    # 3为宽
    cap.set(4, 600)  # 4为高
    cap.set(10, 5)  # 10为亮度

    while True:
        success, img = cap.read()
        if success:
            cv2.imshow('video', img)
        else:
            break

        if cv2.waitKey(1) & 0xFF == ord('q'):
            # 有按键则返回按键ASCII码,无按键则返回-1
            # 取按键返回ASCII码二进制后8位,为按键'q'退出循环
            break

    cap.release()
    cv2.destroyAllWindows()


if __name__ == '__main__':
    # read_img()
    read_video()

示例代码详解
1. 读取和显示图像
import cv2

def read_img():
    """
    读取图片
    :return:
    """
    img = cv2.imread(r'./resources/lena.jpeg')
    cv2.imshow('lena img', img)
    cv2.waitKey(0)
  • 读取图像

    img = cv2.imread(r'./resources/lena.jpeg')
    
    • 使用 cv2.imread() 函数读取图像文件。路径使用原始字符串(r'...')以避免转义字符的问题。
  • 显示图像

    cv2.imshow('lena img', img)
    cv2.waitKey(0)
    
    • 使用 cv2.imshow() 函数显示图像。第一个参数是窗口名称,第二个参数是要显示的图像。
    • cv2.waitKey(0) 使程序等待用户按键后退出。0 表示无限期等待。
2. 读取和显示视频
def read_video():
    """
    读取视频/摄像头
    :return:
    """
    # 视频路径为获取资源,id序号则为摄像头id,0为默认第一个摄像头id
    cap = cv2.VideoCapture(r'./resources/video.mp4')
    # cap = cv2.VideoCapture(0)
    # cap propId 0-18
    cap.set(3, 800)    # 3为宽
    cap.set(4, 600)    # 4为高
    cap.set(10, 5)     # 10为亮度

    while True:
        success, img = cap.read()
        if success:
            cv2.imshow('video', img)
        else:
            break

        if cv2.waitKey(1) & 0xFF == ord('q'):
            # 有按键则返回按键ASCII码,无按键则返回-1
            # 取按键返回ASCII码二进制后8位,为按键'q'退出循环
            break

    cap.release()
    cv2.destroyAllWindows()
  • 读取视频或摄像头

    cap = cv2.VideoCapture(r'./resources/video.mp4')
    # cap = cv2.VideoCapture(0)
    
    • 使用 cv2.VideoCapture() 函数读取视频文件或摄像头。传入视频文件路径或摄像头ID(例如 0 表示默认摄像头)。
  • 设置视频属性

    cap.set(3, 800)    # 3为宽
    cap.set(4, 600)    # 4为高
    cap.set(10, 5)     # 10为亮度
    
    • 使用 cap.set() 方法设置视频捕获属性。参数 3 表示宽度,4 表示高度,10 表示亮度。
  • 读取和显示视频帧

    while True:
        success, img = cap.read()
        if success:
            cv2.imshow('video', img)
        else:
            break
    
    • 使用 cap.read() 方法读取视频帧。如果读取成功,successTrueimg 为当前帧的图像;否则,successFalse,表示视频结束或读取失败。
  • 按键检测

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
    
    • 使用 cv2.waitKey(1) 等待1毫秒,如果有按键按下,则返回按键的ASCII码。& 0xFF 用于取按键ASCII码的后8位。ord('q') 返回字符 ‘q’ 的ASCII码。如果按键为 ‘q’,则退出循环。
  • 释放资源

    cap.release()
    cv2.destroyAllWindows()
    
    • 使用 cap.release() 释放视频捕获对象。
    • 使用 cv2.destroyAllWindows() 关闭所有OpenCV窗口。
主函数
if __name__ == '__main__':
    # read_img()
    read_video()
  • 主函数
    • if __name__ == '__main__': 确保当脚本直接运行时才执行以下代码。
    • 调用 read_img()read_video() 函数来读取和显示图像或视频。
总结

本文详细介绍了如何使用 OpenCV 在 Python 中读取和显示图像以及视频,并通过具体的代码示例展示了整个过程。通过使用 cv2.imread()cv2.imshow()cv2.VideoCapture()cv2.waitKey() 等函数,我们可以轻松地处理图像和视频数据。

希望本文能帮助你在实际项目中更好地应用 OpenCV 进行图像和视频处理。如果有任何疑问或需要进一步的帮助,请随时提问!


以上就是关于使用 OpenCV 读取和显示图像与视频的技术讲解,希望对你的学习和实践有所帮助!如果有任何疑问或需要进一步的帮助,请随时提问!


http://www.kler.cn/a/381107.html

相关文章:

  • 数据结构---------二叉树前序遍历中序遍历后序遍历
  • MySQL 8.0:explain analyze 分析 SQL 执行过程
  • Redis 持久化机制详解
  • <论文>初代GPT长什么样?
  • Linux 中的 cat 命令:使用、原理与源码解析
  • Retrofit源码分析:动态代理获取Api接口实例,解析注解生成request,线程切换
  • Flutter鸿蒙next中封装一个输入框组件
  • 数据结构--二叉树_链式(下)
  • Node.js:Express 中间件 CORS 跨域资源共享
  • ETLCloud怎么样?深度解析其在数据管理中的表现
  • 小菜家教平台(二):基于SpringBoot+Vue打造一站式学习管理系统
  • 数据结构与算法——Java实现 54.力扣1008题——前序遍历构造二叉搜索树
  • C语言中如何实现动态内存分配
  • Unity网络开发基础(part5.网络协议)
  • 软硬链接与动静态库
  • [N-155]基于springboot,vue宿舍管理系统
  • Java项目实战II基于Spring Boot的交通管理在线服务系统设计与实现(开发文档+数据库+源码)
  • VSCode Markdown pdf导出修改字体、行距等
  • MySQL之JDBC入门详解
  • MySQL初学之旅(1)配置与基础操作
  • 大数据-205 数据挖掘 机器学习理论 - 线性回归 最小二乘法 多元线性
  • Vue3版本的uniapp项目运行至鸿蒙系统
  • 数据结构(8.7_3)置换——选择排序
  • 【P2-8】ESP8266 WIFI模块在STA+AP模式下相关指令及注意事项
  • RDD转换算子:重分区算子:【repartition、coalesce】
  • [C++ 核心编程]笔记 4.2.5 深拷贝与浅拷贝