#2 - OpenCV中的GUI功能.pdf
### OpenCV中的GUI功能 #### 一、开始使用图像 **目标:** - 从文件中读取图像。 - 在OpenCV窗口中显示图像。 - 将图像写入文件。 **源代码概述与讲解:** ##### 1. 导入库 ```python import cv2 as cv import sys ``` 在第一行,我们将OpenCV库导入,并将其重命名为`cv`,以便后续调用更加简洁方便。第二行导入了`sys`库,它将用于在无法正确读取图像时退出程序。 ##### 2. 图像读取 ```python img = cv.imread("starry_night.jpg") ``` 通过`cv.imread`函数读取名为`starry_night.jpg`的图像。该函数接受两个参数:第一个参数是图像的文件路径;第二个参数是读取模式,默认值为`IMREAD_COLOR`,即以BGR 8位格式加载图像。此外,还有两种其他读取模式: - `IMREAD_UNCHANGED`:按照原始格式加载图像,包括Alpha通道(如果存在)。 - `IMREAD_GRAYSCALE`:以灰度图像形式加载。 读取后,图像数据将存储在`cv::Mat`对象中,即变量`img`。 ##### 3. 检查图像是否成功读取 ```python if img is None: sys.exit("Could not read the image.") ``` 如果图像没有成功读取(`img`为`None`),则通过`sys.exit`函数输出错误消息并退出程序。 ##### 4. 显示图像 ```python cv.imshow("Display window", img) ``` 使用`cv.imshow`函数在名为“Display window”的窗口中显示图像。`cv.imshow`函数接受两个参数:窗口标题和要显示的`cv::Mat`对象。 为了保持窗口打开直到用户按下任意键,我们使用`cv.waitKey`函数。该函数的参数定义了等待时间(毫秒),设置为0表示无限期等待。 ```python k = cv.waitKey(0) ``` `cv.waitKey`函数返回用户按下的键的ASCII码值。如果用户按下的是`s`键,则将图像保存为`starry_night.png`。 ```python if k == ord("s"): cv.imwrite("starry_night.png", img) ``` `cv.imwrite`函数用于将图像写入文件。它接受两个参数:文件路径和`cv::Mat`对象。 **支持的图像格式:** OpenCV支持多种图像格式,包括但不限于: - Windows位图(bmp) - 便携式图像格式(pbm、pgm、ppm) - Sun光栅(sr、ras) - JPEG(jpeg、jpg、jpe) - JPEG 2000(jp2) - TIFF(tiff、tif) - PNG(png) #### 二、开始使用视频 **目标:** - 学习如何读取视频、显示视频和保存视频。 - 从摄像头捕获视频并显示。 **源代码概述与讲解:** ##### 1. 导入库 ```python import numpy as np import cv2 as cv ``` 除了OpenCV之外,还导入了NumPy库,尽管在示例代码中并没有使用到它。 ##### 2. 创建`VideoCapture`对象 ```python cap = cv.VideoCapture(0) ``` 通过`cv.VideoCapture`函数创建一个对象,参数`0`表示第一个摄像头设备(通常是内置摄像头)。如果想指定其他摄像头,可以更改该参数。 ##### 3. 检查摄像头是否成功打开 ```python if not cap.isOpened(): print("无法打开摄像头") exit() ``` `cap.isOpened()`方法检查摄像头是否已经成功打开。如果没有打开,则输出错误消息并退出程序。 ##### 4. 读取视频帧并处理 ```python while True: ret, frame = cap.read() if not ret: print("Can't receive frame (stream end?). Exiting ...") break gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) cv.imshow('frame', gray) if cv.waitKey(1) == ord('q'): break ``` 使用`cap.read()`方法读取视频帧,其中`ret`表示是否成功获取帧,`frame`是当前帧的数据。如果读取失败,则输出提示信息并退出循环。 每读取一帧,就将其转换为灰度图像并显示出来。使用`cv.waitKey(1)`函数使窗口保持更新状态,且每显示一帧就等待1毫秒。如果用户按下`q`键,则跳出循环。 ##### 5. 释放资源 ```python cap.release() cv.destroyAllWindows() ``` 在完成所有操作后,使用`cap.release()`释放`VideoCapture`对象,并通过`cv.destroyAllWindows()`关闭所有OpenCV窗口,确保程序正常结束。 总结来说,本文详细介绍了如何使用OpenCV进行图像和视频的基本操作,包括图像的读取、显示以及保存,同时涵盖了视频的捕获和显示。这些基本操作为更复杂的图像处理和计算机视觉任务打下了坚实的基础。
剩余12页未读,继续阅读
- 粉丝: 497
- 资源: 42
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助