当前位置: 首页 > article >正文

从opencv-python入门opencv--GUI功能之图像和视频操作

从opencv-python入门opencv--GUI功能之图像和视频操作

  • 一、文章介绍
  • 二、图像的读取显示及保存
    • 1、 cv.imread()
    • 2、cv.imshow()
    • 3、cv.imwrite()
    • 4、cv.waitKey()
    • 5、cv.destroyAllWindows()
    • 6、图像读写存完整示例代码及效果
  • 三、视频读取保存功能
    • 1、cv.VideoCapture()
      • (1)打开相机
      • (2)播放视频文件
      • (3)保存视频

一、文章介绍

本文主要介绍opencv的GUI(Graphics User Interface)中的图像和视频操作,GUI中文指图像用户界面。
包括:图像读写显示、视频读写显示功能。

二、图像的读取显示及保存

1、 cv.imread()

opencv的imread()函数读取指定路径中的一张图像。
在这里插入图片描述
(1)其中filename表示图像的路径,可以输入相对路径,也可以输入绝对路径。
常见的图像格式有:
【1】JPEG (.jpg, .jpeg): 使用广泛的压缩格式,适合照片和复杂图像。
【2】PNG (.png): 支持无损压缩和透明度通道,适合需要透明背景的图像。
【3】BMP (.bmp): 位图格式,通常不压缩,占用较大存储空间。
【4】TIFF (.tiff, .tif): 支持多种压缩方式和多页图像,常用于专业摄影和印刷。
【5】GIF (.gif): 支持动画和透明度,但颜色深度有限(最多256种颜色)。
【6】WEBP (.webp): Google 开发的图像格式,支持无损和有损压缩,适合网页使用。
【7】PPM (.ppm): 简单的位图格式,通常用于图像处理的实验。
【8】PGM (.pgm): 灰度图像格式。

(2)其中flag表示读取图像的方式
【1】cv2.IMREAD_COLOR (默认值):
以彩色图像读取,忽略透明度通道。读取结果为 BGR 格式。对应值为 1。
【2】cv2.IMREAD_GRAYSCALE:
以灰度图像读取,将图像转换为单通道灰度图像。对应值为 0。
【3】cv2.IMREAD_UNCHANGED:
以原始格式读取图像,包括 alpha 通道(透明度)。如果图像是 PNG 格式并包含透明度通道,读取结果将保留该通道。对应值为 -1。

2、cv.imshow()

opencv的imshow()函数在窗口中显示图像,窗口自动适应图像的大小。可以创建任意多个显示窗口,但是名称一样的情况下,上一张图像会被覆盖。
在这里插入图片描述
(1)其中winname表示显示窗口的名称
(2)mat表示要显示的图像变量

3、cv.imwrite()

opencv的imwrite()函数用于保存图像到指定路径。
在这里插入图片描述
(1)const String & filename:
输出文件的路径和名称,包括文件扩展名(如 .jpg, .png 等)。
(2)InputArray img:
要保存的图像,可以是任意类型的图像数组(如 cv::Mat)。
(3)const std::vector & params = std::vector() (可选):
用于指定图像编码参数的可选参数。不同的图像格式支持不同的参数。例如,对于 JPEG 格式,可以指定图像质量;对于 PNG 格式,可以指定压缩级别。
例如:

	# 设置 JPEG 图像的质量为 90
    params = [int(cv2.IMWRITE_JPEG_QUALITY), 90]
    # 保存图像
    success = cv2.imwrite('output_quality.jpg', img, params)

4、cv.waitKey()

cv.waitKey() 是一个键盘绑定函数,它的参数是以毫秒为单位的时间。该函数为任意键盘事件等待指定毫秒。如果你在这段时间内按下任意键,程序将继续。如果传的是 0,它会一直等待键盘按下。它也可以设置检测特定的击键执行不同的代码,如下:

if k == 27: # ESC 退出
    cv.destroyAllWindows()
elif k == ord('s'): # 's' 保存退出
    cv.imwrite('data\gui\starry_night.png',img)
    cv.destroyAllWindows()

在这里插入图片描述

5、cv.destroyAllWindows()

cv.destroyAllWindows() 简单的销毁我们创建的所有窗口。如果你想销毁任意指定窗口,应该使用函数 cv.destroyWindow() 参数是确切的窗口名。
在这里插入图片描述

6、图像读写存完整示例代码及效果

#####################################
#该代码学习opencv-python对于图像的读取、显示以及保存功能
#####################################
import cv2 as cv
img = cv.imread('data\gui\starry_night.jpg')
cv.imshow('image',img)
k = cv.waitKey(0)
if k == 27: # ESC 退出
    cv.destroyAllWindows()
elif k == ord('s'): # 's' 保存退出
    cv.imwrite('data\gui\starry_night.png',img)
    cv.destroyAllWindows()

读取显示效果:
在这里插入图片描述

保存效果:
在这里插入图片描述

三、视频读取保存功能

1、cv.VideoCapture()

opencv的视频捕捉接口可以直接打开相机(可用笔记本内置摄像头测试),也可以从路径读取视频进行播放。

(1)打开相机

代码:

import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
while(True):
    # 一帧一帧捕捉
    ret, frame = cap.read()
    # 显示返回的每帧
    cv.imshow('frame',frame )
    if cv.waitKey(1) & 0xFF == ord('q'):
        break
# 当所有事完成,释放 VideoCapture 对象
cap.release()
cv.destroyAllWindows()

如果想从摄像机获取视频,需要对cv.VideoCapture()传入设备索引,其中,0表示默认摄像头,1表示第二个摄像头,以此类推。
cap.read() 返回一个 bool 值(True/False)。如果加载成功,它会返回True。因此,你可以通过这个返回值判断视频是否结束。

cap 表示创建一个VideoCapture对象,用来捕获视频。有时,cap 可能没有初始化 capture。在这种情况下,此代码显示错误。你可以通过该方法 cap.isOpened() 检查它是否初始化。如果它是 True,那么是好的,否则用 cap.open() 打开在使用。

(2)播放视频文件

代码:

import numpy as np
import cv2 as cv
cap = cv.VideoCapture('vtest.avi')
while(cap.isOpened()):
    ret, frame = cap.read()
    cv.imshow('frame',frame )
    if cv.waitKey(25) & 0xFF == ord('q'):
        break
cap.release()
cv.destroyAllWindows()

它和从相机捕获一样,只需要用视频文件名更改相机索引。同时显示 frame,为 cv.waitKey() 使用合适的时间。如果它太小,视频将非常快,如果太大,视频将很慢 (嗯,这就是如何显示慢动作)。正常情况下,25 毫秒就可以了。

(3)保存视频

代码:

import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
# 声明编码器和创建 VideoWrite 对象
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi',fourcc, 20.0, (640,480))
while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        frame = cv.flip(frame,0)
        # 写入已经翻转好的帧
        out.write(frame)
        cv.imshow('frame',frame)
        if cv.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break
# 释放已经完成的工作
cap.release()
out.release()
cv.destroyAllWindows()

代码解读:
【1】fourcc = cv.VideoWriter_fourcc(*‘XVID’)
首先需要指明FourCC码。FourCC 是用于指定视频解码器的 4 字节代码,可用编码的列表。

常见的编码如下:
{1}In Fedora: DIVX, XVID, MJPG, X264, WMV1, WMV2. (XVID 是最合适的. MJPG 结果比较大. X264 结果比较小)
{2}In Windows: DIVX (还需要测试和添加跟多内容)
{3}In OSX: MJPG (.mp4), DIVX (.avi), X264 (.mkv).

对于 MJPG, FourCC 的代码作为 cv.VideoWriter_fourcc(‘M’,’J’,’P’,’G’) 或 cv.VideoWriter_fourcc(*’MJPG’) 传递。

【2】out = cv.VideoWriter(‘output.avi’,fourcc, 20.0, (640,480))
接着需要创建一个视频写入(VideoWriter)对象,指明输出文件的名字,20表示每秒的帧数,0表示编码器使用灰度帧,如果是1表示使用彩色帧。(640,480)表示每一帧的大小。


http://www.kler.cn/news/340401.html

相关文章:

  • 前端反接保护:实用方案解析与探讨
  • 红帽操作系统Linux基本命令2( Linux 网络操作系统 06)
  • Spring Cache 的说明及常用注解
  • 《C++跨平台开发:突破界限,释放无限可能》
  • leetcode 刷题day35动态规划Part04 背包问题(1049. 最后一块石头的重量 II 、494. 目标和、474.一和零)
  • 猫玖破密啦
  • 人工智能之机器学习
  • 多模态简单了解
  • Vue的基本用法及模板语法
  • 如何在Android Studio中找到CMakeLists.txt的打印信息
  • 【题目解析】蓝桥杯23国赛C++中高级组 - 斗鱼养殖场
  • 【在Linux世界中追寻伟大的One Piece】DNS与ICMP
  • Study-Oracle-11-ORALCE19C-ADG集群搭建
  • docker简述
  • 讯飞星火编排创建智能体学习(五):变量和文本拼接
  • 209.长度最小的子数组
  • Python 的测试
  • 【大数据应用开发】2023年全国职业院校技能大赛赛题第05套
  • LSTM 长短期记忆网络:解锁时间序列数据的深层秘密
  • 省市区json记录