成都高端网站开发,开网店卖什么适合新手,手机设计软件有哪些软件,wordpress人性化主题文章目录 前言一、opencv图片1.1 读取图像1.2 显示图像1.3 写入图像1.4 示例代码 二、Opencv视频2.1 从相机捕获视频获取摄像头一帧一帧读取显示图片VideoCapture 中的get和set函数示例代码 2.2 从文件播放视频示例代码 2.3 保存视频示例代码 总结 前言
在计算机视觉和图像处理… 文章目录 前言一、opencv图片1.1 读取图像1.2 显示图像1.3 写入图像1.4 示例代码 二、Opencv视频2.1 从相机捕获视频获取摄像头一帧一帧读取显示图片VideoCapture 中的get和set函数示例代码 2.2 从文件播放视频示例代码 2.3 保存视频示例代码 总结 前言
在计算机视觉和图像处理中使用OpenCV库可以进行各种强大的图片和视频操作。无论是简单的图像加载和显示还是复杂的视频处理和分析OpenCV提供了丰富的工具和函数。本文将介绍如何使用Python和OpenCV进行图片和视频的基本操作包括读取、显示、保存以及视频的处理等。 一、opencv图片
目标 在这里您将学习如何阅读图像、如何显示图像以及如何将其保存回来 您将学习以下函数cv2.imread() cv2.imshow() cv2.imwrite()
1.1 读取图像
使用函数 cv.imread() 读取图像。图像应位于工作目录中或者应提供图像的完整路径。
第一个参数是图片名称 第二个参数是一个标志它指定了图像的读取方式。
cv.IMREAD_COLOR 加载彩色图像。图像的任何透明度都将被忽略。它是默认标志。 cv.IMREAD_GRAYSCALE以灰度模式加载图像 cv.IMREAD_UNCHANGED 加载图像包括 alpha 通道
注意 除了这三个标志您可以分别传递整数 1、0 或 -1。
import cv2
import numpy as npimg cv2.imread(./opencv.jpg,cv2.IMREAD_UNCHANGED)警告
即使图像路径错误它也不会抛出任何错误但会给您print imgNone
1.2 显示图像
使用函数 cv.imshow()在窗口中显示图像。窗口会自动适应图像大小。
第一个参数是一个窗口名称它是一个字符串。第二个论点是我们的形象。您可以根据需要创建任意数量的窗口但使用不同的窗口名称。
cv2.imshow(opencv,img)cv2.waitKey(0)
cv2.destroyAllWindows()cv.waitKey()是一个键盘绑定函数。它的论点是以毫秒为单位的时间。该函数等待任何键盘事件的指定毫秒。如果在这段时间内按任意键程序将继续。如果传递 0它将无限期地等待击键。它还可以设置为检测特定的击键例如如果按下了 a 键等我们将在下面讨论。
注意 除了绑定键盘事件外此函数还处理许多其他 GUI 事件因此您必须使用它来实际显示图像。
destroyAllWindows就是把全部的窗口都释放内存。
cv.destroyAllWindows() 只是销毁我们创建的所有窗口。如果要销毁任何特定窗口请使用函数 cv.destroyWindow()在其中传递确切的窗口名称作为参数。
注意 在特殊情况下您可以创建一个空窗口稍后将图像加载到其中。在这种情况下您可以指定窗口是否可调整大小。它是通过函数 cv.namedWindow 完成的。默认情况下该标志为 cv.WINDOW_AUTOSIZE。但是如果指定要cv.WINDOW_NORMAL的标志则可以调整窗口大小。当图像尺寸过大以及向窗口添加跟踪栏时这将很有帮助。
1.3 写入图像
使用函数 cv.imwrite() 保存图像。
第一个参数是文件名第二个参数是要保存的图像。
cv.imwrite(messigray.pngimg)这会将图像以 PNG 格式保存在工作目录中。
1.4 示例代码
示例代码的要求为读取一个图像以灰度图的方式读取且写入图像到文件夹下
import cv2
import numpy as npimg cv2.imread(./opencv.jpg,cv2.IMREAD_GRAYSCALE)cv2.imshow(opencv,img)cv2.imwrite(./opencv-gray.jpg,img)cv2.waitKey(0)
cv2.destroyAllWindows() 二、Opencv视频
2.1 从相机捕获视频
通常我们必须使用相机捕获实时流。OpenCV 为此提供了一个非常简单的接口。让我们从相机中捕获视频将其转换为灰度视频并显示。只需一个简单的任务即可开始。
若要捕获视频需要创建 VideoCapture 对象。其参数可以是设备索引也可以是视频文件的名称。设备索引只是指定哪个相机的数字。通常会连接一个摄像头就像我的情况一样。所以我只是传递 0或 -1。您可以通过传递 1 来选择第二个相机依此类推。之后您可以逐帧捕获。但最后不要忘记释放捕获。
获取摄像头
首先我们先要获取摄像头对象
cap cv.VideoCapture(0)他的参数就是你要获取的摄像头的编号
接下来我们需要判断摄像头是否打开
if not cap.isOpened():print(Cannot open camera)exit()一帧一帧读取
然后我们就要去一帧一帧读取图片了
# Capture frame-by-frame
ret, frame cap.read()使用read()函数可以读取一帧 返回值一为是否读取成功返回值二为读取到的东西
接下来我们去判断ret是否有图片
if not ret:print(Cant receive frame (stream end?). Exiting ...)break显示图片
接下来我们直接显示即可
cv.imshow(frame, frame)在最后不要忘记了释放资源
# When everything done, release the capture
cap.release()
cv.destroyAllWindows()VideoCapture 中的get和set函数
您还可以使用 cap.getpropId 方法访问此视频的某些功能其中 propId 是 0 到 18 之间的数字。每个数字表示视频的一个属性如果它适用于该视频完整的详细信息可以在这里看到cv::VideoCapture::get()。其中一些值可以使用 cap.set(propId value) 进行修改。Value 是所需的新值。
例如我可以通过 和 检查框架宽度和高度。默认情况下它给我 640x480。但我想将其修改为 320x240。只需使用和.cap.get(cv.CAP_PROP_FRAME_WIDTH)cap.get(cv.CAP_PROP_FRAME_HEIGHT)ret cap.set(cv.CAP_PROP_FRAME_WIDTH,320)ret cap.set(cv.CAP_PROP_FRAME_HEIGHT,240)
注意 如果出现错误请确保使用任何其他相机应用程序如 Linux 中的 Cheese相机工作正常。
示例代码
import numpy as np
import cv2 as cv
cap cv.VideoCapture(0)
if not cap.isOpened():print(Cannot open camera)exit()
while True:# Capture frame-by-frameret, frame cap.read()# if frame is read correctly ret is Trueif not ret:print(Cant receive frame (stream end?). Exiting ...)breakcv.imshow(frame, frame )if cv.waitKey(1) ord(q):break
# When everything done, release the capture
cap.release()
cv.destroyAllWindows()2.2 从文件播放视频
它与从相机捕获相同只需使用视频文件名更改相机索引即可。此外在显示框架时请为.如果太少视频会非常快如果太高视频会很慢嗯这就是你如何以慢动作显示视频。在正常情况下25 毫秒是可以的。cv2.waitKey()
示例代码
import numpy as np
import cv2 as cv
cap cv.VideoCapture(vtest.avi)
while cap.isOpened():ret, frame cap.read()# if frame is read correctly ret is Trueif not ret:print(Cant receive frame (stream end?). Exiting ...)breakgray cv.cvtColor(frame, cv.COLOR_BGR2GRAY)cv.imshow(frame, gray)if cv.waitKey(1) ord(q):break
cap.release()
cv.destroyAllWindows()直接在读取摄像头的这个VideoCapture对象里面写路径即可。
注意 确保安装了正确版本的 ffmpeg 或 gstreamer。有时使用Video Capture是一件令人头疼的事情主要是由于ffmpeg / gstreamer的错误安装。
2.3 保存视频
因此我们捕获视频逐帧处理然后保存该视频。对于图像它非常简单只需使用 .这里需要更多的工作。cv.imwrite()
这一次我们创建一个 VideoWriter 对象。我们应该指定输出文件名例如output.avi。然后我们应该指定 FourCC 代码详见下一段。然后应传递每秒帧数 fps 和帧大小。最后一个是isColor标志。如果是编码器需要彩色帧否则它适用于灰度帧。True
FourCC 是用于指定视频编解码器的 4 字节代码。可用代码列表可在 fourcc.org 中找到。它依赖于平台。遵循编解码器对我来说效果很好。
在 Fedora 中DIVX、XVID、MJPG、X264、WMV1、WMV2。XVID 更可取。MJPG 产生高尺寸视频。X264 提供非常小尺寸的视频 在 Windows 中DIVX更多待测试和添加 在OSX中MJPG.mp4DIVX.aviX264.mkv。 对于MJPGFourCC代码以’cv.VideoWriter_fourcc‘M’‘J’‘P’‘G’cv.VideoWriter_fourcc*‘MJPG’的形式传递。or
在从相机捕获的代码下方在垂直方向上翻转每一帧并保存。
示例代码
import numpy as np
import cv2 as cv
cap cv.VideoCapture(0)
# Define the codec and create VideoWriter object
fourcc cv.VideoWriter_fourcc(*XVID)
out cv.VideoWriter(output.avi, fourcc, 20.0, (640, 480))
while cap.isOpened():ret, frame cap.read()if not ret:print(Cant receive frame (stream end?). Exiting ...)breakframe cv.flip(frame, 0)# write the flipped frameout.write(frame)cv.imshow(frame, frame)if cv.waitKey(1) ord(q):break
# Release everything if job is finished
cap.release()
out.release()
cv.destroyAllWindows()总结
通过使用OpenCV我们可以轻松进行图片和视频的各种操作。从基本的读取和显示到保存和处理视频OpenCV提供了简单而强大的接口。图片和视频的处理是计算机视觉领域中的基础而OpenCV为开发者提供了一个灵活而高效的工具集使得这些任务变得更加容易实现。通过结合Python的简洁性和OpenCV的强大功能我们可以在图像和视频处理的领域中取得令人瞩目的成果。希望这篇文章能够为你提供一个良好的入门让你更好地理解和应用OpenCV。