概述
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()
方法读取视频帧。如果读取成功,success
为True
,img
为当前帧的图像;否则,success
为False
,表示视频结束或读取失败。
- 按键检测:
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()
等函数,我们可以轻松地处理图像和视频数据。