没有合适的资源?快使用搜索试试~ 我知道了~
#2 - OpenCV中的GUI功能.pdf
需积分: 5 0 下载量 40 浏览量
2024-04-14
15:43:45
上传
评论
收藏 839KB PDF 举报
温馨提示
试读
13页
文章链接:https://blog.csdn.net/2301_81176265/article/details/137744007
资源推荐
资源详情
资源评论
一、开始使用图像
原作者:Ana Huamán
兼容性:OpenCV >= 3.4.4
警告:
本教程可能包含过时的信息。
1.1 目标
在本教程中,您将学习如何:
从文件中读取图像(使用
cv::imread
)
在OpenCV窗口中显示图像(使用
cv::imshow
)
将图像写入文件(使用
cv::imwrite
)
1.2 源代码
下载代码:点击这里
代码一览:
import cv2 as cv
import sys
img = cv.imread("starry_night.jpg")
if img is None:
sys.exit("Could not read the image.")
cv.imshow("Display window", img)
k = cv.waitKey(0)
if k == ord("s"):
cv.imwrite("starry_night.png", img)
1.3 讲解
第一步,导入OpenCV python库。正确的方法是给它另外分配一个名称cv,下面将使用这个名称来引用这个库。
import cv2 as cv
import sys
现在,让我们分析主要代码。作为第一步,我们用OpenCV读取图像“starry_night.jpg”。为此,调用cv::imread函数
使用第一个参数指定的文件路径加载图像。第二个参数是可选的,它指定了我们想要的图像格式。这可能是:
IMREAD_COLOR :以BGR 8位格式加载图像。这是这里使用的 默认 值
IMREAD_UNCHANGED :按原样加载图像,包括Alpha通道(如果存在)
IMREAD_GRAYSCALE :将图像作为强度图像加载
读取后,图像数据将存储在cv::Mat对象中。
img = cv.imread("starry_night.jpg")
注意:
OpenCV提供对图像格式Windows位图(bmp)、便携式图像格式(pbm、pgm、ppm)和Sun光栅(sr、ras)
的支持。
在插件的帮助下(如果您自己构建库,您需要指定使用它们,但是在我们默认提供的软件包中),您还可以加
载JPEG(jpeg,jpg,jpe),JPEG 2000(jp 2-在CMake中代号为Jasper),TIFF文件(tiff,tif)和便携式网
络图形(png)等图像格式。
此外,OpenEXR也是一种可能性。
然后,如果图像被正确加载,则执行检查。
if img is None:
sys.exit("Could not read the image.")
然后,通过调用cv::imshow函数显示图像。第一个参数是窗口的标题,第二个参数是将要显示的cv::Mat对象。
因为我们希望我们的窗口一直显示到用户按下一个键(否则程序会很快结束),所以我们使用cv::waitKey函数,它
唯一的参数是它应该等待用户输入多长时间(以毫秒为单位)。零意味着永远等待。返回值是按下的键。
cv.imshow("Display window", img)
k = cv.waitKey(0)
最后,如果按下的键是“s”键,则图像被写入.png文件。为此,调用cv::imwrite函数,该函数将文件路径和cv::Mat对
象作为参数。
if k == ord("s"):
cv.imwrite("starry_night.png", img)
二、开始使用视频
2.1 目标
了解如何读取视频、显示视频和保存视频。
学习从摄像头捕获视频并显示它。
您将学习这些函数:
cv.VideoCapture()
,
cv.VideoWriter()
2.2 从摄像头捕获视频
下载代码:点击这里
通常,我们必须用相机捕捉实时流。OpenCV提供了一个非常简单的接口来实现这一点。让我们从摄像头捕捉视频
(我使用笔记本电脑上的内置网络摄像头),将其转换为灰度视频并显示。这只是一个简单的任务。
要捕获视频,您需要创建一个 VideoCapture 对象。它的参数可以是设备索引或视频文件的名称。设备索引只是指
定哪个相机的数字。通常会连接一台相机(就像我的情况一样)。所以我只传递0(或-1)。您可以通过传递1等来
选择第二个相机。
之后,您可以逐帧捕获。但在最后,不要忘记释放捕获。
import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
if not cap.isOpened():
print("无法打开摄像头")
exit()
while True:
# 逐帧捕获
ret, frame = cap.read()
# 如果正确捕获,ret为True
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.release()
cv.destroyAllWindows()
cap.read()
返回一个bool(
True
/
False
)。如果帧读取正确,则为
True
。因此,您可以通过检查此返回值来检查
视频的结尾。
有时,cap可能没有初始化捕获。在这种情况下,此代码显示错误。您可以通过方法 cap.isOpened() 检查它是否已
初始化。如果是True,那就可以。否则改为使用 cap.open() 打开它。
您还可以使用 cap.get(propId) 方法访问此视频的一些功能,其中propId是从0到18的数字。每个数字表示视频的属
性(如果它适用于该视频)。完整的细节可以在这里看到:cv::VideoCapture::get()。其中一些值可以使用
剩余12页未读,继续阅读
资源评论
ssst、
- 粉丝: 374
- 资源: 42
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功