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

news2024/11/25 14:42:55

文章目录

  • 题目
  • 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')):
        break
    elif(key & 0xff == ord('s')):
        cv2.imwrite("E://pic//picc//mylove.png", img)
        break
    else:
        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')):
            break
    else:
        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'):
        break

cv2.destroyAllWindows()

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

关于np.uint8

在这里插入图片描述

OpenCV中的TrackBar控件

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

TrackBar的使用

OpenCV颜色空间默认BGR格式

# -*- coding: utf-8 -*-
import cv2
import numpy as np

def 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'):
        break

cv2.destroyAllWindows()

在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索人工智能领域——每日30个名词详解【day3】

目录 前言 正文 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN📚。 📣如需转载,请事先与我联系以…

【C++初阶】STL详解(一)string类

本专栏内容为:C学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚代码仓库:小小unicorn的代码仓库&…

春秋云境靶场CVE-2022-25578漏洞复现(利用htaccess文件进行任意文件上传)

文章目录 前言一、CVE-2022-25578靶场概述二、CVE-2022-25578复现需要知道的知识点1、什么是htaccess文件2、上传htaccess文件的条件是什么?3、htaccess文件的作用是什么? 三、CVE-2022-32991漏洞复现1、信息收集2、找上传点3、上传后蚁剑连接getshell 总…

vmware安装MacOS以及flutter遇到的问题

安装过程:参考下面的文章 链接: 虚拟机VMware安装苹果系统macOS,超级详细教程,附文件下载,真教程!! 无限重启情况: (二) 配置虚拟机找到你的虚拟机安装文件…

氢原子波函数等概率面的绘制

氢原子波函数等概率面的绘制 归一化后的氢原子波函数

如何解决3d max渲染效果图全白这类异常问题?

通过3d max渲染效果图时,经常会出现3Dmax渲染效果图全黑或是3Dmax渲染效果图全白这类异常问题。可能遇到这类问题较多的都是新手朋友。不知如何解决。 3dmax渲染出现异常的问题,该如何高效解决呢?今天小编这里整理几项知识点,大家…

数据结构与算法【递归】Java实现

递归 递归是一种解决计算问题的方法,其中解决方案取决于同一类问题的更小子集。 特点: 自己调用自己,如果说每个函数对应着一种解决方案,自己调用自己意味着解决方案是一样的(有规律的)每次调用&#xf…

在 Rocky 中使用 FreeRDP 远程连接 Windows 机器

前言: 远程控制已成为 IT 人员和企业用户在处理日常任务时不可或缺的工具。无论是进行系统管理、支持远程工作,还是协助解决技术问题,一个可靠且高效的远程桌面工具都是业务连续性的关键。开始我个人使用了todesk(也曾鲜想过向日…

Google 向中国开发者开放数百份 TensorFlow 资源

Google 的机器学习框架 TensorFlow 自 2015 年开源后,已然成为 AI 领域最受欢迎的框架。 据统计,在广受欢迎的 Python 编程语言在线软件知识库 PyPi 上,TensorFlow 的下载次数已超过 90 万,其中有 15% 来自中国。谷歌官方博客也表…

电脑篇——将串口映射到远程电脑上

通过Windows自带的远程桌面连接功能,可以通过修改本地资源选项,将本机的串口/端口映射到远程电脑上。 即可将端口映射到远程电脑上。 (在远程的电脑的设备管理器中可能不会显示,但是用串口调试相关的工具,是可以找到相…

算法笔记-第九章-二叉树的遍历(未完成-还要搞)

算法笔记-第九章-二叉树的遍历 二叉树的先序遍历二叉树的中序遍历二叉树的后序遍历二叉树的层次遍历注意点一:注意点二: 二叉树的高度二叉树的结点层号翻转二叉树翻转二叉树不同的方法方法一:用栈实现方法二:用队列实现方法三&…

深度学习之基于Pytorch和OCR的识别文本检测系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介深度学习与OCRPyTorch在OCR中的应用文本检测系统的关键组成部分1. 图像预处理2. 深度学习模型3. 文本检测算法4. 后处理 二、功能三、系统四. 总结 一项目简…

git clone:SSL: no alternative certificate subject name matches target host name

git clone 时的常见错误: fatal: unable to access ‘https://ip_or_domain/xx/xx.git/’: SSL: no alternative certificate subject name matches target host name ‘ip_or_domain’ 解决办法: disable ssl verify git config --global http.sslVe…

基于 Amazon EKS 搭建开源向量数据库 Milvus

一、前言 生成式 AI(Generative AI)的火爆引发了广泛的关注,也彻底点燃了向量数据库(Vector Database)市场,众多的向量数据库产品开始真正出圈,走进大众的视野。 根据 IDC 的预测,…

基于STC12C5A60S2系列1T 8051单片机的数模芯片TLC5615实现数模转换应用

基于STC12C5A60S2系列1T 8051单片的数模芯片TLC5615实现数模转换应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍数模芯片TLC5615介绍通过按键调节数模芯片TLC5615…

低代码编辑平台后台实现

背景 之前做过一个前端低代码编辑平台,可以实现简单的移动端页面组件拖拽编辑: https://github.com/li-car-fei/react-visual-design 最近基于C的oatpp框架实现了一下后台。使用oatpp框架做web后台开发时,发现按照官方的示例使用的话&#…

SSH远程登录协议

目录 什么是ssh服务器 概念 优点 原理 SSH登录 方法一 无需验证 方法二 格式: ssh -l 用户名 IP 地址 -p port -l :指定登录名称 -p:选项,指定登录端口(当服务端的端口非默认时,需要使用-p…

拿到信创天翼云电脑账号后,我又傻眼了...

在《面向国产系统的 App 发布,含泪总结》中,我就吐槽过信创产品的不靠谱。用户购买一台终端,都没法用,得经历复杂的账号申请。 紧催慢催,等待了半个月之后,今天终于拿到了账号。然而,满怀期待登…

OpenAI与微软合作,构建 ChatGPT 5 模型;10天准确天气预报

🦉 AI新闻 🚀 OpenAI与微软合作,构建 ChatGPT 5 模型,下一代人工智能或拥有超级智能 摘要:OpenAI首席执行官 Sam Altman 在接受采访时表示,OpenAI正在与微软合作构建下一代人工智能模型 ChatGPT 5&#x…

Django——模板层、模型层

模板层 一. 模版语法 {{ }}: 变量相关 {% %}: 逻辑相关 1. 注释是代码的母亲 {# ... #} 2. 基本数据类型传值 int1 123 float1 11.11 str1 我也想奔现 bool1 True list1 [小红, 姗姗, 花花, 茹茹] tuple1 (111, 222, 333, 444) dict1 {username: jason, age: 18, i…