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

时间:2024-11-06 07:15:05
概述

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 读取和显示图像与视频的技术讲解,希望对你的学习和实践有所帮助!如果有任何疑问或需要进一步的帮助,请随时提问!