OpenCV入门2——图像视频的加载与展示一些API

文章目录

  • 题目
  • OpenCV创建显示窗口
  • OpenCV加载显示图片
    • 题目
  • OpenCV保存文件
  • 利用OpenCV从摄像头采集视频
  • 从多媒体文件中读取视频帧
  • 将视频数据录制成多媒体文件
  • OpenCV控制鼠标
    • 关于[np.uint8](https://stackoverflow.com/questions/68387192/what-is-np-uint8)
  • OpenCV中的TrackBar控件
  • TrackBar的使用

题目

在这里插入图片描述
D
在这里插入图片描述

OpenCV创建显示窗口

在这里插入图片描述
多看源码参考文档
在这里插入图片描述
在这里插入图片描述

import cv2
cv2.namedWindow('new', cv2.WINDOW_NORMAL)
cv2.imshow('new', 0)key = cv2.waitKey(0)
if(key == 'q'):exit()cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

import cv2
cv2.namedWindow('new', cv2.WINDOW_NORMAL)
cv2.resizeWindow('new', 1920, 1080)
cv2.imshow('new', 0)key = cv2.waitKey(0)
if(key == 'q'):exit()cv2.destroyAllWindows()

在这里插入图片描述

OpenCV加载显示图片

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import cv2
cv2.namedWindow('img', cv2.WINDOW_NORMAL)
# cv2.resizeWindow('img', 1920, 1080)
img = cv2.imread('E://pic//mylove.jpg')
cv2.imshow('img', img)key = cv2.waitKey(0)
if(key &0xff == ord('q')):cv2.destroyAllWindows()

可以看官方文档
在这里插入图片描述
其中提到,cv2.waitKey()返回值是int类型,而ASCII码是8位(char),所以我们需要用key &0xff取它的低八位来实现,而ord函数是Python中的另一个内建函数,用于将字符转换为对应的ASCII码。

题目

在这里插入图片描述
B
在这里插入图片描述

OpenCV保存文件

在这里插入图片描述

import cv2
cv2.namedWindow('img', cv2.WINDOW_NORMAL)
# cv2.resizeWindow('img', 1920, 1080)
img = cv2.imread('E://pic//mylove.jpg')while True:cv2.imshow('img', img)key = cv2.waitKey(0)if(key & 0xff == ord('q')):breakelif(key & 0xff == ord('s')):cv2.imwrite("E://pic//picc//mylove.png", img)breakelse:print(key - 32)cv2.destroyAllWindows()

利用OpenCV从摄像头采集视频

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2# 创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)# 获取视频设备
cap = cv2.VideoCapture(0)while True:# 从摄像头读取视频帧ret, frame = cap.read()# 将视频帧在窗口中显示cv2.imshow('video', frame)# 等待键盘事件,如果为q,退出key = cv2.waitKey(1)if(key & 0xff == ord('q')):break# 释放VideoCapture
cap.release()
cv2.destroyAllWindows()

在这里插入图片描述

从多媒体文件中读取视频帧

在这里插入图片描述
和之前从摄像头采集视频最大的区别是,要根据视频的fps来修改cv2.waitKey()里的值,如果你是22fps的视频,相当于1s走22帧,即1000ms走22帧,即一帧需要1000 / 22ms,而这个就是cv2.waitKey()里应该填的值

# -*- coding: utf-8 -*-
import cv2# 创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)# 获取视频设备/从视频文件中读取视频帧
# cap = cv2.VideoCapture(0)
cap = cv2.VideoCapture("E://DownloadPack//Video//particles.mp4")while True:# 从摄像头读取视频帧ret, frame = cap.read()# 将视频帧在窗口中显示cv2.imshow('video', frame)# 等待键盘事件,如果为q,退出key = cv2.waitKey(40)if(key & 0xff == ord('q')):break# 释放VideoCapture
cap.release()
cv2.destroyAllWindows()

在这里插入图片描述

将视频数据录制成多媒体文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2# 创建VideoWriter为写多媒体文件
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
vw = cv2.VideoWriter('.//out.mp4', fourcc, 24, (1280, 720))# 创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)# 获取视频设备/从视频文件中读取视频帧
cap = cv2.VideoCapture(0)
# cap = cv2.VideoCapture("E://DownloadPack//Video//particles.mp4")while True:# 从摄像头读取视频帧ret, frame = cap.read()# 将视频帧在窗口中显示cv2.imshow('video', frame)# 写数据到多媒体文件vw.write(frame)# 等待键盘事件,如果为q,退出key = cv2.waitKey(40)if(key & 0xff == ord('q')):break# 释放VideoCapture
cap.release()# 释放VideoWriter
vw.release()cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2# 创建VideoWriter为写多媒体文件
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
vw = cv2.VideoWriter('.//out.mp4', fourcc, 24, (1280, 720))# 创建窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)# 获取视频设备/从视频文件中读取视频帧
cap = cv2.VideoCapture(0)
# cap = cv2.VideoCapture("E://DownloadPack//Video//particles.mp4")# 判断摄像头是否为打开状态
while cap.isOpened():# 从摄像头读取视频帧ret, frame = cap.read()if ret == True:# 将视频帧在窗口中显示cv2.imshow('video', frame)# 重新将窗口设置为指定大小cv2.resizeWindow('video', 640, 480)# 写数据到多媒体文件vw.write(frame)# 等待键盘事件,如果为q,退出key = cv2.waitKey(40)if(key & 0xff == ord('q')):breakelse:break;# 释放VideoCapture
cap.release()# 释放VideoWriter
vw.release()cv2.destroyAllWindows()

OpenCV控制鼠标

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as np# 鼠标回调函数
def mouse_callback(event, x, y, flags, userdata):print(event, x, y, flags, userdata)# 创建窗口
cv2.namedWindow('mouse', cv2.WINDOW_NORMAL)
cv2.resizeWindow('mouse', 640, 360)# 设置鼠标回调
cv2.setMouseCallback('mouse', mouse_callback, "666")# 显示窗口和背景
img = np.zeros((360, 640, 3), np.uint8)
while True:cv2.imshow('mouse', img)key = cv2.waitKey(0)if key & 0xff == ord('q'):breakcv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

关于np.uint8

在这里插入图片描述

OpenCV中的TrackBar控件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

TrackBar的使用

OpenCV颜色空间默认BGR格式

# -*- coding: utf-8 -*-
import cv2
import numpy as npdef callback():pass# 创建窗口
cv2.namedWindow('trackbar', cv2.WINDOW_NORMAL)# 创建trackbar
cv2.createTrackbar('R', 'trackbar', 31, 255, callback)
cv2.createTrackbar('G', 'trackbar', 24, 255, callback)
cv2.createTrackbar('B', 'trackbar', 0, 255, callback)# 创建一个背景图片
img = np.zeros((480, 640, 3), np.uint8)while True:# 获取当前trackbar的值r = cv2.getTrackbarPos('R', 'trackbar')g = cv2.getTrackbarPos('G', 'trackbar')b = cv2.getTrackbarPos('B', 'trackbar')# 改变背景图片颜色img[:] = [b, g, r]cv2.imshow('trackbar', img)key = cv2.waitKey(10)if key & 0xff == ord('q'):breakcv2.destroyAllWindows()

在这里插入图片描述

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/180265.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python---数据序列中的公共方法

公共方法就是 支持大部分 数据 序列。 常见公共方法---简单 运算符描述支持的容器类型合并字符串、列表、元组*复制字符串、列表、元组in元素是否存在字符串、列表、元组、字典not in元素是否不存在字符串、列表、元组、字典 案例: 合并 代码: # …

微机原理_9

一、单项选择题(本大题共15小题,每小题3分,共45分。在每小题给出的四个备选项中,选出一个正确的答案。 1.当运算结果的最高位为1时,标志位() A. CF1 B. OF1 C. SF1 D. ZF1 2、汇编语言源程序中,每个语句由四项组成,如语句要完成一定功能,那么该语句中不可…

windows安装maven,配置环境变量

官网下载: 其他版本找 Other Releases 配置环境变量 1、解压缩之后开始配置环境变量 2、右键此电脑,选中属性->高级系统设置->高级->环境变量。 3、①和②任选一个都可 ①在系统变量那边增加MAVEN_HOME,路径是解压缩后的文件路径。…

如何使用 Github Action 管理 Issue

本文作者为 360 奇舞团前端开发工程师 Daryl 前言 很多小伙伴打开 github 上的仓库都只使用Code查看代码,或者只是把 github 当成一个代码仓库,但是 github 还提供了很多好用的功能。 其中,GitHub Action就是一个很好用的功能,本文…

双点重发布路由策略实验

任务&IP分配如下: 双点重发布实验 第一步:配置IP地址&环回地址 以R1为例,R2、R3、R4同理 interface GigabitEthernet 0/0/0 ip address 12.0.0.1 24 interface GigabitEthernet 0/0/1 ip address 13.0.0.1 24 interface LookBack …

[Unity3D] C# 十进制、二进制、十六进制 之间进制的转换

//十进制 --> 二进制 int data 100; string bin Convert.ToString(data, 2); // “1100100”//十进制 --> 十六进制 int data 100; string hex “”;hex Convert.ToString(data, 16); // “64” hex “0X” Convert.ToString(data, 16); // “0X64” hex string.…

ubuntu下C++调用matplotlibcpp进行画图(超详细)

目录 一、换源 二、安装必要的软件 三、下载matplotlibcpp 四、下载anaconda 1.anaconda下载 2.使用anaconda配置环境 五、下载CLion 1.下载解压CLion 2.替换jbr文件夹 3.安装CLion 4.激活CLion 5.CLion汉化 6.Clion配置 六、使用CLion运行 七、总结 我的环…

demo(二)eurekaribbon----服务注册、提供与消费

前一篇实现了服务注册中心的搭建,并提供服务注册到注册中心上。在之前的基础上,实现服务消费。 一、相关介绍 1、RestTemplate工具 2、LoadBalanced注解 二、ribbon示例: 先启动eureka-service注册中心,再将eureka-client修改…

零小时零信任:数据标记如何加速实施

现在是零信任的零小时。 虽然这个概念已经存在多年,但现在联邦政府实施它的时间已经紧迫。 拜登政府备忘录被誉为以战斗速度安全交付关键任务数据的解决方案,要求联邦机构在 2024 财年年底前实现具体的零信任安全目标。 此外,国防部正在努…

JavaScript的函数的形参与实参是怎么回事

0 写在前面 此文给小白看的,如果不是可以直接关闭 1 讲解 例如JavaScript中定义函数 //定义函数 function 方法名(形参){方法体-->使用形参}//使用函数 方法名字(实参)具体干了什么呢?此处以伪代码举例 //定义函数 function eat(A,B){A 去 B 家吃…

iOS性能优化

了解屏幕成像的原理。 有一个电子枪然后在很多横轴方向上 发射电子,不同横轴的电子枪根据显示器中的硬件时钟产生一系列的定时信号,以此来让电子以不同的时间发射出去 这些电子一瞬间的运动形成了一帧动画。 CPU优化: 1.文本计算优化 如果一…

【Web开发】基于 Jekyll 中的 Chirpy 模板搭建博客网站(一):成功经验篇

基于 Jekyll 中的 Chirpy 模板搭建博客网站(一):成功经验篇 1.Jekyll 介绍2.Chirpy 介绍3.安装步骤3.1 Prerequisites3.2 Installation3.2.1 Creating a New Site3.2.2 Installing Dependencies 3.3 Usage3.3.1 Configuration3.3.2 Running L…