python入门(六) opencv的安装,图片操作,绘制文字图形,视频操作

news2025/2/27 5:25:29

文章目录

    • `课程目标`
    • 认识openCV
    • 如何安装openCV
    • OpenCV 读取、缩放、翻转、写入图像
      • 读取图片
      • 缩放图片
      • 翻转图片
      • 写入图片
    • openCV绘制图形和文字
      • 创建一个纯黑色的底图
      • 画一个矩形
      • 再画一个正方形
      • 再画一个圆形
      • 再画一个实心圆
      • 画一条线
      • 画多边形
      • 在真实的图片上加载图形
      • 在真实的图片上加载文字
    • OpenCV 视频操作
      • 演示在python的窗口中显示图片
      • OpenCV读取摄像头视频流, 并且显示
      • OpenCV读取视频文件
      • OpenCV读取摄像头视频流, 并且显示和保存为mp4文件
      • OpenCV在摄像头视频流上添加文字和图形

本人工作中,用到了ai相关技术,但是java出身,所以从0开始学习,先从python入门了,本文章为第六篇。

“前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。”

课程目标

  • 安装 OpenCV
  • OpenCV 读取、缩放、翻转、写入图像
  • OpenCV 在图像上绘制文字、几何图形
  • OpenCV 视频操作

认识openCV

OpenCV(Open Source Computer Vision) 是计算机视觉和机器学习软件库
Intel 1999年 创建,用C++语言编写 (提供了Python、Ruby、MATLAB等接口),OpenCV 支持对图像缩放、旋转、绘制文字图形等基础操作
OpenCV 库包含了很多计算机视觉领域常见算法: 目标检测、目标跟踪等.

如何安装openCV

安装
conda install -c conda-forge opencv
conda install opencv (换源后)或pip install opencv-python
检查是否安装成功:

在这里插入图片描述

OpenCV 读取、缩放、翻转、写入图像

进入jupyter-lab,代码如下:

读取图片

在这里插入图片描述

缩放图片

在这里插入图片描述

翻转图片

在这里插入图片描述

写入图片

在这里插入图片描述

openCV绘制图形和文字

创建一个纯黑色的底图

在这里插入图片描述

画一个矩形

在这里插入图片描述

再画一个正方形

在这里插入图片描述

再画一个圆形

在这里插入图片描述

再画一个实心圆

在这里插入图片描述

画一条线

在这里插入图片描述

画多边形

在这里插入图片描述

在真实的图片上加载图形

在这里插入图片描述

在真实的图片上加载文字

字体包位置:
在这里插入图片描述
写个文字的工具方法:

# 导入PIL对应包
import cv2
from PIL import Image, ImageDraw, ImageFont
import numpy as np


# 绘制中文
def cv2AddChineseText(img, text, position, textColor=(0, 255, 0), textSize=30):
    img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    draw = ImageDraw.Draw(img)
    # 字体的格式
    fontStyle = ImageFont.truetype(
        "./../font/simsun.ttc", textSize, encoding="utf-8")
    # 绘制文本
    draw.text(position, text, textColor, font=fontStyle)
    # 转换回OpenCV格式
    return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)

在这里插入图片描述

OpenCV 视频操作

演示在python的窗口中显示图片

# 演示在python的窗口中显示图片
# 导入opencv
import cv2
import numpy as np

# 读取图片
img = cv2.imread('./../img/cat.jpg')

# 显示图片
while True:
    
    cv2.imshow('Demo',img)
    
    # 等待10毫秒 ,如果等待至少10ms,并且用户按了ESC键 (ord(''))
    #if cv2.waitKey(10) & 0xFF == 27:
    if cv2.waitKey(10) & 0xFF == ord('q'):
        break

# 关闭所有的窗口
cv2.destroyAllWindows()

OpenCV读取摄像头视频流, 并且显示

"""
OpenCV读取摄像头视频流, 并且显示

"""

# 导入OpenCV
import cv2
import numpy as np

#调用摄像头
cap = cv2.VideoCapture(0)



while True:
    # 返回frame
    rec,frame = cap.read()
    
    # 镜像
    frame = cv2.flip(frame, 1)
    # 灰度显示
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
   
    
    # 显示画面
    cv2.imshow('Demo', frame)
    
    #退出条件: q
    if cv2.waitKey(10) & 0xFF == ord('q'):
        break
  

cap.release()
cv2.destroyAllWindows()

OpenCV读取视频文件

"""
OpenCV读取视频文件
"""

# 导入opencv的包
import cv2
import numpy as np

# 读取文件
cap = cv2.VideoCapture('./../video/myDemo.mp4',0)

if not cap.isOpened():
    print('文件不存在或者编码错误')
    
while cap.isOpened():
    # 读取每一帧
    
    ret, frame = cap.read()    
    if ret:
        # 显示画面
        cv2.imshow('Demo', frame)
        
        #退出条件
        if cv2.waitKey(10) & 0xFF == ord('q'):
            break
    else:   
        # 画面播放完毕,自动退出
        break  

cap.release()
cv2.destroyAllWindows()    


OpenCV读取摄像头视频流, 并且显示和保存为mp4文件

"""
OpenCV读取摄像头视频流, 并且显示
保存为mp4文件
"""

# 导入OpenCV
import cv2
import numpy as np

#调用摄像头
cap = cv2.VideoCapture(0)


#编码
#DIVX,X264
fourcc = cv2.VideoWriter_fourcc(*'X264')
fps = 20


# 获取摄像头实际大小
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

writer = cv2.VideoWriter('../video/myDemo.mp4',fourcc,fps,(width,height))
while True:
    # 返回frame
    rec,frame = cap.read()
    
    # 镜像
    frame = cv2.flip(frame, 1)
    # 灰度显示
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    # 写入画面到文件
    writer.write(frame)
    
    # 显示画面
    cv2.imshow('Demo', frame)
    
    #退出条件: q
    if cv2.waitKey(10) & 0xFF == ord('q'):
        break
  
writer.release()    
cap.release()
cv2.destroyAllWindows()

OpenCV在摄像头视频流上添加文字和图形

"""
OpenCV在摄像头视频流上添加文字和图形
"""

# 导入opencv等包
import cv2
import numpy as np
import time
# 导入自定义模块
import drawUtils


# 读取摄像头
cap = cv2.VideoCapture(0)   

# 当前Unix时间戳
start_time = time.time()
    
while True:
    
    # 读取每一帧    
    ret, frame = cap.read()   
     
    # 对frame进行操作
    frame = cv2.flip(frame, 1)
    
    # 画一个矩形
    cv2.rectangle(frame, (20,200),(120,300),(255,0,255),10)
    
    now = time.time()
    fps_text = int(1/( now - start_time))
    start_time = now
    
    
    
    frame_text = "帧率: " + str(fps_text)
    
    # print(fps_text)
    #显示帧率
    frame = drawUtils.cv2AddChineseText(frame, frame_text, (20,50),(0,255,0),30)
    
    # 显示画面
    cv2.imshow('Demo', frame)   
        
    #退出条件 ESC
    if cv2.waitKey(10) & 0xFF == 27:
        break


cap.release()
cv2.destroyAllWindows()    


效果如下:

在这里插入图片描述
本人太帅,打码了哈哈。


大功告成!!!

“前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。”

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

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

相关文章

创建菜单栏、菜单、菜单项

1、QMainWindow窗口 1.1、创建菜单栏 this 代表的是 当前窗口(主窗口),也就是 当前窗口中添加/设置 菜单栏 this->resize(800,600); //创建 菜单栏 QMenuBar *menuBar new QMenuBar(this); //将菜单栏 添加到主窗口的特殊位置 this-&g…

第12届蓝桥杯省赛真题剖析-2020年12月20日Scratch编程初级组

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第123讲。 第12届蓝桥杯省赛举办了两次,这是2020年10月20日举行的第一次省赛初级组试题,比赛仍…

<STM32>STM32CubeMX-串口收发通信(DMA传输)(6)

<STM32>STM32CubeMX-串口收发通信(DMA传输)(6) 本节主要讲解串口DMA通信的功能,主要采用DMA接收数据的方式; DMA、串口的详细解说可参考《STM32F4XXX中文参考手册》,资料有详细的讲解和说明&am…

【机器视觉------标定篇(二)】三点成圆算法(求相机旋转中心)

应用场景 机器视觉项目应用中,相机安装在机器人上,并且需要定位产品返回坐标偏差以及角度偏差。 与九点标定配合使用,实现精准角度补偿。 算法输入 不共线的三点坐标 A(X₁,Y₁) ,B(X₂,Y₂&…

关于加解密方法报错java.security.InvalidKeyException: Illegal key size

1、找到自己的jdk安装路径下去; 2、找到java.security查看是否存在#crypto.policyunlimited,如果有把该#号去掉,注释打开; 3、若java.security文件中不存在#crypto.policyunlimited,则应该去从官网下载jce策略文件(补丁…

springboot+vue旧物置换网站(完整源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的旧物置换网站。项目源码请联系风歌,文末附上联系信息 。 目前有各类成品java毕设,需要请看文末联系方式 。ja…

Python|基于粒子群和遗传算法的微电网优化调度

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Hadoop2.0伪分布式平台环境搭建

一、搭建环境的前提条件 环境:ubuntu-16.04 hadoop-2.6.0 jdk1.8.0_161。这里的环境不一定需要和我一样,基本版本差不多都ok的,所需安装包和压缩包自行下载即可。 因为这里是配置Hadoop的教程,配置Java以及安装VMware Tools就自行…

为什么2017年之后操作系统仍将扮演重要角色?

操作系统的历史虽然不像计算科学那么久远,但却也已经拥有相当可观的发展历程。大型机客户于上世纪五十年代末编写了第一批操作系统,这些系统直到数十年后的今天仍拥有相当的知名度——其中包括来自IBM公司的OS/360以及贝尔实验室打造的Unix。 在可预期的…

详解二叉搜索树 --- key模型和key/value模型

🍀作者:阿润菜菜 📖专栏:数据结构 一、认识二叉搜索树的key模型和key/value模型 key的模型是指每个节点只有一个键值,用于确定节点在树中的位置。节点的键值必须满足二叉搜索树的性质,即左子节点的键值小于…

SpringBoot 中使用Guava实现单机令牌桶限流

SpringBoot项目中如何对接口进行限流,有哪些常见的限流算法,如何优雅的进行限流。 首先就让我们来看看为什么需要对接口进行限流? 为什么要进行限流? 因为互联网系统通常都要面对大并发大流量的请求,在突发情况下&a…

你还还还没学会RabbitMQ?-----------RabbitMQ详解及快速入门(工作模式)

你像天外来物一样,求之不得(咳咳,指offer)🌹 文章目录什么是MQ?MQ的优势与劣势使用MQ需要满足的条件常见的MQ产品关于RabbitMQ生产者消费者工作模式订阅模式路由模式通配符模式什么是MQ? Messa…

机器学习——支持向量机的训练

目录 实践SVM分类 测试1-1​编辑 测试1-2 SVM核心 支持向量机函数 分类器SVC的主要属性: 分类器SVC的主要方法: 回归器SVR的主要属性: 支持向量机在鸢尾花分类中的应用 实践SVM分类 (1)参数C的选择: C为惩罚系数,也称为正则化系数: C越小模型越受限(即单个数据…

【设计模式】从Mybatis源码中学习到的10种设计模式

文章目录一、前言二、源码:学设计模式三、类型:创建型模式1. 工厂模式2. 单例模式3. 建造者模式四、类型:结构型模式1. 适配器模式2. 代理模式3. 组合模式4. 装饰器模式五、类型:行为型模式1. 模板模式2. 策略模式3. 迭代器模式六…

长江流域9省2市可视化(不展示业务信息水质及真实断面)

一、处理9省2市地理信息为geojson集成到项目 shp转geojson关键Java代码 /*** shp转换为Geojson* param shpPath* return*/ public static Map shape2Geojson(String shpPath,String filePath){Map map new HashMap();FeatureJSON fjson new FeatureJSON();try{StringBuffer …

阶段二33_面向对象高级_IO[转换流,对象流]

知识点: 1.转换流:InputStreamReader,OutputStreamWriter2.对象流:ObjectInputStream,ObjectOutputStream一.转换流 1.转换流原理图 2.转换流概述 转换流就是来进行字节流和字符流之间转换的 InputStreamReader是从…

p75 应急响应-数据库漏洞口令检索应急取证箱

数据来源 必须知识点: 第三方应用由于是选择性安装,如何做好信息收集和漏洞探针也是获取攻击者思路的重要操作, 除去本身漏洞外,提前预知或口令相关攻击也要进行筛选。排除三方应用攻击行为,自查漏洞分析攻击者思路&a…

表白墙(服务器版)

文章目录一、准备工作二、前后端交互后端前端三、数据库版本一、准备工作 我们之前实现过这样一个表白墙,具体前端代码参考 表白墙 这篇文章 但是我们之前写的这个表白墙有一些问题: 1.如果我们刷新页面/重新开启,之前的数据就不见了 2.我们…

python pyc文件

参考自 What are pyc files in Python 和Python什么情况下会生成pyc文件? - 知乎 加上了我自己的理解 官方文档有这么解释 A program doesnt run any faster when it is read from a ‘.pyc’ or ‘.pyo’ file than when it is read from a ‘.py’ file; the o…

C生万物 | 一探指针函数与函数指针的奥秘

文章目录一、指针函数1、定义2、示例二、函数指针1、概念理清2、如何调用函数指针&#xff1f;3、两道“有趣”的代码题O(∩_∩)O< 第一题 >< 第二题 >4、函数指针数组概念明细具体应用&#xff1a;转移表✔5、指向函数指针数组的指针三、实战训练 —— 回调函数1、…