OpneCV(一)GUI特性


1 图片操作

读取展示与保存

这段代码通过以下步骤实现读取图像、展示图像和保存图像:

  1. cv.imread:读取图像。

  2. cv.imshow:展示图像。

  3. cv.waitKey:等待键盘输入。

  4. cv.imwrite:保存图像。

OpenCV支持多种图像格式,包括bmp、pbm、pgm、ppm、sr和ras等。如果使用插件(如果自己构建库,需要指定使用它们,但在提供的包中,默认包含这些插件),还可以加载jpeg、jpg、jpe、jp2(在CMake中称为Jasper)、tiff、tif和png等格式的图像。此外,OpenEXR也是一个可用的选项。

操作代码

读取展示与保存

# 1 图片操作
# 1.1 读取图片并展示图片
import sys
img = cv.imread(cv.samples.findFile("OpenCV/test.jpg"))#使用imread函数读取图片
if img is None:
    sys.exit("Could not read the image.")

cv.imshow("Display window", img)
k = cv.waitKey(0)#等待键盘输入,0表示无限等待,1表示等待1ms

if k == ord("s"):
    cv.imwrite("starry_night.png", img)#保存图片,第一个参数是保存的文件名,第二个参数是图片对象

2 视频操作

视频读取

  1. 创建VideoCapture对象:为了从相机捕获视频,需要创建一个VideoCapture对象。对象的参数可以是设备索引或视频文件的名称。

  2. 指定设备索引:设备索引用于指定使用的相机。如果只连接了一个相机,可以通过传递0或-1来指定它。若要使用第二个相机,则传递1,以此类推。

  3. 逐帧捕获:创建VideoCapture对象后,可以逐帧捕获视频内容。

  4. 释放捕获资源:视频捕获完成后,需要调用VideoCapture对象的release方法来释放捕获资源。

读取代码

视频读取

# 2.1 读取视频并展示视频
import numpy as np

cap = cv.VideoCapture(0)#打开摄像头
# cap = cv.VideoCapture(cv.samples.findFile("OpenCV/test.mp4"))#打开视频文件,
# cap = cv.VideoCapture("OpenCV/test.mp4")#打开视频文件
if not cap.isOpened():
    print("Cannot open camera")
    exit()

while True:
    ret, frame = cap.read()#读取视频帧,ret表示是否读取成功,frame表示读取的视频帧
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)#将视频帧转换为灰度图
    # cv.imshow("frame", frame)#展示彩色图
    cv.imshow("frame", gray)#展示灰度图
    if cv.waitKey(1) == ord("q"):#按q退出
        break

cap.release()#释放摄像头
cv.destroyAllWindows()#关闭窗口

视频保存

  1. 创建VideoWriter对象:首先,需要创建一个VideoWriter对象,用于将视频帧保存为视频文件。

  2. 指定输出文件名:例如output.avi,这是保存视频的文件名。

  3. 指定FourCC代码:这是一个4字节的代码,用来指定视频编解码器。例如,使用cv.VideoWriter_fourcc(‘M’, ‘J’, ‘P’, ‘G’)或cv.VideoWriter_fourcc(*‘MJPG’)来指定MJPG编解码器。

  4. 设置帧率(fps):视频每秒的帧数,影响视频的流畅度。

  5. 设置帧大小:视频帧的尺寸,例如(640, 480),即视频的分辨率。

  6. 保存视频:在循环中,使用out.write(frame)将处理后的帧写入到VideoWriter对象中,从而保存视频。

代码例子

视频保存

# 2.2 保存视频
cap = cv.VideoCapture(0)#打开摄像头

fourcc = cv.VideoWriter_fourcc(*"mp4v")#设置视频编码格式
out = cv.VideoWriter("output.mp4", fourcc, 25.0, (640, 480))#设置输出视频文件名,编码格式,帧率,分辨率

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    frame = cv.flip(frame, 1)#翻转视频帧


    out.write(frame)#写入视频帧
    cv.imshow("frame", frame)
    if cv.waitKey(1) == ord("q"):
        break

cap.release()
out.release()
cv.destroyAllWindows()

数组重组


文章作者: Hkini
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Hkini !
评论
  目录