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

news2024/11/18 12:39:48

文章目录

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

在这里插入图片描述

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码。

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/1210959.html

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

相关文章

antd中的form表单数据不更新

antd中的form表单 initialValue导致数据不更新问题 理解 : initialValue就是所谓的defaultValue,只会在第一次赋值的时候改变,却又有一些不同,因为 initialValue又会因其他改动而改变。 解决: form.resetFields();

内网Jenkins 部署.net(dotnet)项目

一、前置条件 内网部署Jenkins,并安装好所需插件 此篇内容需承接内网搭建Jenkins自动化远程部署项目到Windows服务器_jenkins内网安装-CSDN博客 ,才更好操作与理解 二、在Jenkins中创建项目 三、配置项目 General Source Code Management Build Envi…

2023最新版本 从零基础入门C++与QT(学习笔记) -4- C/C++混合编程

🎏在C兼容C只需要调用C头文件 🎄格式 🎈 -1- extern(关键字) “C”{ }(花括号) 🎈 -2- 花括号里面填写要包含的头文件 🎄代码段格式 extern "C" {#include “stdio.h”#include “string.h” }&#x…

2023深圳高交会,11月15-19日在深圳会展中心盛大开幕,展出五天时间

跨越山海,共赴鹏城。 11月15日至19日,第二十五届中国国际高新技术成果交易会在深圳会展中心(福田展区)和深圳国际会展中心(宝安展区)两馆同时举行。一场不可错过的全球性高科技盛会如期而至。 科技赋能发…

2023年数据泄露事件频发,企业应该如何做好数据安全保护?

在当今数字化时代,每时每刻都会产生大量的数据,这些数据包含大量的敏感信息,网络犯罪者可以利用这些数据获取巨大的利益,由此他们会通过技术攻击、网络钓鱼等各种非法手段来获取,而这也导致数据泄露事件频频发生。 以下…

冰点还原精灵Deep Freeze for mac版

Deep Freeze是一种系统恢复软件,它可以保护计算机系统免受恶意软件和不必要的更改。它的基本功能是在计算机重启后恢复到原始状态,即使用户进行了任何更改也不例外。 Deep Freeze主要用于公共场所的计算机,如图书馆、学校实验室和互联网咖啡馆…

JavaScript基础入门05

目录 1.操作结点 1.1新增节点 1.1.1. 创建元素节点 1.1.2. 插入节点到 dom 树中 1.2删除节点 2.代码案例: 猜数字 2.1预期效果 2.2代码实现 3.代码案例: 表白墙 3.1预期效果 3.2创建页面布局 3.3调整样式 3.4实现提交 3.5实现点击按钮的动画效果 4.代码案例: 待办…

小波神经网络的时间序列预测——短时交通流量预测

大家好,我是带我去滑雪! 小波神经网络(Wavelet Neural Network,WNN)结合了小波变换和神经网络的特性,是一种在信号处理和模式识别领域应用广泛的神经网络模型。它的设计灵感来自于小波变换的多尺度分析特性…

Hive 查询优化

Hive 查询优化 -- 本地 set mapreduce.framework.namelocal; set hive.exec.mode.local.autotrue; set mapperd.job.trackerlocal; -- yarn set mapreduce.framework.nameyarn; set hive.exec.mode.local.autofalse; set mapperd.job.trackeryarn-- 向量模式 set hive.vectori…

算法萌新闯力扣:搜索插入位置

力扣热题:搜索插入位置 开篇 对于想要学会二分查找的算法萌新来说,这道题是非常友好的学习题目,完完全全按照二分查找模版就可以完成。大伙儿还不赶紧练起来! 题目链接:35.搜索插入位置 题目描述 代码思路 这道题时完完全全的…

使用VC++设计程序:对于一幅256级灰度图像,求其一元熵值、二维熵值

数字图像处理–实验二B图像的一维熵与二维熵算法 本文主要是对图像进行一维熵以及二维熵的计算,下面附有实现的代码 文章目录 数字图像处理--实验二B图像的一维熵与二维熵算法一、 实验内容二、 一维熵1. 一维熵的定义2. 一维熵的C代码实现 三、 二维熵1. 二维熵的定…

JSP注释方式演示 讲解显式与隐式注释

好 今天我们来了解一下jsp中的注释哦 它支持两种注释: 显式注释/隐式注释 显式注释 是 允许被客户端看到的 就是 打开浏览器 用查看源码方式能看到的注释 与之对应 隐式注释 就是 在客户端 是无法看到这些注释信息的 显式注释 的语法就是html的注释语法 <!-- 显式注释 --…

03-学成在线内容管理模块之课程查询

课程查询 需求分析 教学机构人员点击课程管理按钮进入课程查询界面,在课程列表页面输入查询条件查询课程的信息 当不输入查询条件时默认会全部课程信息,输入查询条件会查询符合条件的课程信息,约束条件是本教学机构查询本机构的课程信息 数据模型(model工程) 课程查询功能…

ACM练习——第三天

今天继续练习C和ACM模式 在写题之前先了解一些新的知识 1.#include <algorithm> #include <algorithm> 是 C 标准库中的头文件之一&#xff0c;其中包含了一系列用于处理各种容器&#xff08;如数组、向量、列表等&#xff09;和其他数据结构的算法。这个头文件提供…

spring cloud alibaba之nacos

spring cloud nacos 安装和启动nacos # 解压nacos安装包 # tar -zvxf nacos-server-1.4.1.tar.gz# nacos默认是以集群的模式启动&#xff0c;此处先用单机模式 # cd /usr/local/mysoft/nacos/bin # sh startup.sh -m standalone# nacos 日志 # tail -f /usr/local/mysoft/na…

C++ [多态]

本文已收录至《C语言和高级数据结构》专栏&#xff01; 作者&#xff1a;ARMCSKGT 多态 前言正文多态的概念多态的定义构成多态的条件关于final和override关于重载,重写和重定义 抽象类概念补充 多态的原理虚表指针和虚表关于虚函数的调用动态绑定和静态绑定 单继承与多继承中的…

Python 如何实现解释器(Interpreter)设计模式?什么是解释器设计模式?

什么是解释器&#xff08;Interpreter&#xff09;设计模式&#xff1f; 解释器&#xff08;Interpreter&#xff09;设计模式是一种行为型设计模式&#xff0c;它定义了一种语言文法的表示&#xff0c;并提供了一个解释器&#xff0c;用于解释语言中的句子。该模式使得可以定…

程序员黑话之故障专辑(中英文对照版)

去年出过一期「程序员黑话集」&#xff0c;一直想着更新一季&#xff0c;正好最近业内接连发生了几起影响比较大的故障&#xff0c;那我们就专门做一期「故障专辑」吧。 故障 故障有好几种叫法&#xff0c;比较正式的 故障 - Outage事故 - Incident 不怎么严重的&#xff0…

文生图超级大合集!几乎包含所有模型,提示词教程

除了DALLE 3、Midjourney、Stable Difusion&#xff0c;你还知道哪些好用小众的文生图模型吗&#xff1f; 你知道一张精美的AI图片&#xff0c;需要哪些精准的提示词、效果融合以及制作流程吗&#xff1f; 如果把几乎所有文生图模型集合在一个平台中&#xff0c;并且还能叠加…

Python小白之PyCharm仍然显示“No module named ‘xlwings‘”

Python小白之“没有名称为xlwings‘的模块”-CSDN博客文章浏览阅读8次。cmd 打开命令行&#xff0c;输入python出现>>>的提示格&#xff0c;输入import xlwings 回车&#xff0c;正常报错&#xff1a;No module named xlwings。输入python 回车后&#xff0c;再输入im…