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

opencv 基础(持续更新中)

1 前言

https://www.couragesteak.com/

2 安装

3 基础属性demo

打开一张图片:

import cv2img = cv2.imread('./girl.jpg')print(img.shape)  # (1536, 1024, 3)    数组形状
print(type(img))  # numpy 数组
print(img)        # 三维数组(彩色图片:高度、宽度、像素红绿蓝[蓝0, 绿1, 红2])cv2.waitKey()               # 等待键盘任意输入,然后窗口消失
cv2.destroyAllWindows()     # 销毁内存

4 颜色

在OpenCV中有超过150种颜色转换的方法,常用的有 BGR↔Gray 和 BGR↔HSV。

4.1 Gray 灰度处理

# 黑白图片/灰度化处理
# cv2.COLOR_BGR2GRAY
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('gray', gray)

4.2 HSV 颜色空间

RGB适用于显示系统;

HSV适用于图像处理(物体跟踪)。

属性取值范围
H(色彩/色度)[0, 179]
S(饱和度)[0, 255]
V(亮度)[0, 255]

注意:不同软件取值可能不同。

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
cv2.imshow('hsv', hsv)

4.3 颜色调整&翻转

# 颜色翻转
# 颜色翻转 img[:, :, ::-1]
cv2.imshow("girl老铁", img[:, :, ::-1])# 三原色调整
cv2.imshow("girl老铁", img[:, :, [0, 2, 1]])

4.4 物体跟踪(蓝色物体周围画一个圈)

import cv2
import numpy as npimg = cv2.imread('./url.png')
cv2.imshow('img', img)# HSV 在物体跟踪时比较有效
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)  # 颜色空间转变
# cv2.imshow('hsv', hsv)# 定义在HSV颜色空间中的 蓝色 范围
lower_blue = np.array([110, 50, 50])  # 浅蓝
upper_blue = np.array([130, 255, 255])  # 深蓝
# 根据蓝色的范围,标记图片中哪些位置是蓝色
# 在范围内标记为1,不在标记为0
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# 位运算
res = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow('res', res)# 0:无限等待
cv2.waitKey(3000)  # 无操作,2s后自动消失
cv2.destroyAllWindows()  # 销毁内存

image.png

5 大小与位置

5.1 翻转

# 上下翻转 img[::-1, :, :]
cv2.imshow("girl老铁", img[::-1, :, :])     # 上下翻转  弹出窗口(文字只能是英文)

6 图片马赛克

6.1 缩小->放大拉伸

这种方式,可以理解为模糊化

img2 = cv2.resize(img, (30, 16))
img3 = cv2.resize(img2, (240, 128))

image.png

6.2 缩小,放大比例

img2 = cv2.resize(img, (100, 100))  # 先缩小
img3 = np.repeat(img2, 5, axis=1)  # x轴 放大10倍
img4 = np.repeat(img3, 5, axis=0)  # y轴 放大10倍

image.png

6.3 像素抽取

每10个中 取一个像素

import cv2img = cv2.imread("./img/girl2.png")print(img.shape)  # 宽512、高512img2 = img[::10, ::10]  # 每10个中 取一个像素# 由于图片比较小,我们加入下面2行代码,放大窗口
cv2.namedWindow("girl", flags=cv2.WINDOW_NORMAL)
cv2.resizeWindow("girl", 512, 512)cv2.imshow('girl', img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

7 人脸操作

7.1 人脸检测

下载特征文件:

https://github.com/opencv/opencv/tree/4.x/data/haarcascades

data/haarcascades/haarcascade_frontalface_alt.xml

# -*- coding:utf-8 -*-
"""@Author   :有勇气的牛排@FileName : 06 人脸检测.py@desc     : 描述
"""
import cv2img = cv2.imread("./img/girls2.png")# 加载 人脸 特征文件(opencv库貌似自带)
face_detector = cv2.CascadeClassifier("./static/haarcascade_frontalface_alt.xml")
# 识别人脸,并且获取坐标:x、y、w、h
"""
[[744 100 142 142][205 165 153 153]]
"""
faces = face_detector.detectMultiScale(img)
print(faces)
for x, y, w, h in faces:# 绘制 矩形"""pt1: 左上角pt2: 左下角thickness: 线条粗细"""cv2.rectangle(img,pt1=(x, y),pt2=(x + w, y + h),color=[0, 0, 255],thickness=2)cv2.imshow("girl", img)cv2.waitKey(0)
cv2.destroyAllWindows()

image.png

优化:

  • 黑白色更容易识别
  • 识别效果系数整
# -*- coding:utf-8 -*-
"""@Author   :有勇气的牛排@FileName : 06 人脸检测.py@desc     : 描述
"""
import cv2img = cv2.imread("./img/hezhao.png")# 图片 改为 黑白色,识别更友好(数据更少)
gray = cv2.cvtColor(img, code=cv2.COLOR_BGR2GRAY)# 加载 人脸 特征文件(opencv库貌似自带)
face_detector = cv2.CascadeClassifier("./static/haarcascade_frontalface_alt.xml")
# 识别人脸,并且获取坐标:x、y、w、h
"""
[[744 100 142 142][205 165 153 153]]scaleFactor: 缩放 倍数 -> 放大缩小 判断是否是人脸scaleFactor: 坐标 x、y、w、h
"""
faces = face_detector.detectMultiScale(gray,scaleFactor=1.05,minNeighbors=3)
print(faces)
for x, y, w, h in faces:# 绘制 矩形"""pt1: 左上角pt2: 左下角thickness: 线条粗细"""# cv2.rectangle(img,#               pt1=(x, y),#               pt2=(x + w, y + h),#               color=[0, 0, 255],#               thickness=2)# 画圆圈cv2.circle(img,center=(x+w//2, y+h//2),radius=w//2,color=[0, 255, 0],thickness=2)cv2.imshow("girl", img)cv2.waitKey(0)
cv2.destroyAllWindows()

image.png

7.2 人脸 马赛克

# -*- coding:utf-8 -*-
"""@Author   :有勇气的牛排@FileName : 07 人脸 马赛克.py@desc     : 描述
"""import cv2
import numpy as npimg = cv2.imread("./img/girl2.png")# 图片 改为 黑白色,识别更友好(数据更少)
gray = cv2.cvtColor(img, code=cv2.COLOR_BGR2GRAY)# 加载 人脸 特征文件(opencv库貌似自带)
face_detector = cv2.CascadeClassifier("./static/haarcascade_frontalface_alt.xml")
# 识别人脸,并且获取坐标:x、y、w、h
faces = face_detector.detectMultiScale(gray,scaleFactor=1.05,minNeighbors=3)"""
187 89 152 152
人脸1:左上角 坐标:(187, 89)右下角 坐标:(339, 241)
"""for x, y, w, h in faces:# cv2.rectangle(img,#               pt1=(x, y),#               pt2=(x + w, y + h),#               color=[0, 0, 255],#               thickness=2)print(x, y, w, h)# 获取人脸区域 切片face = img[y:y + h, x:x + w]# img[y:y+h, x:x+w] = face[:, :, ::-1]  # 脸部区域 变色 测试# 人脸 马赛克,切片face = face[::10, ::10]  # 每10个中取一个像素face = np.repeat(face, 10, axis=0)  # 高 --- 行face = np.repeat(face, 10, axis=1)  # 宽 --- 列# 将马赛克区域 尺寸矫正img[y:y + h, x:x + w] = face[:152, :152]cv2.imshow("girl", img)cv2.waitKey(0)
cv2.destroyAllWindows()

image.png

7.3 人脸加贴纸

for x, y, w, h in faces:cv2.rectangle(img,pt1=(x, y),pt2=(x + w, y + h),color=[0, 0, 255],thickness=2)print(x, y, w, h)# 填满整个脸# img[y:y+h, x:x+w] = cv2.resize(sticker, (w, h))# 脸部1/4 左上角# img[y:y+h//2, x:x+w//2] = cv2.resize(sticker, (w//2, h//2))# 居中img[y:y+h//2, x+30:x+w//2+30] = cv2.resize(sticker, (w // 2, h // 2))

image.png

相关文章:

opencv 基础(持续更新中)

1 前言 https://www.couragesteak.com/ 2 安装 3 基础属性demo 打开一张图片: import cv2img cv2.imread(./girl.jpg)print(img.shape) # (1536, 1024, 3) 数组形状 print(type(img)) # numpy 数组 print(img) # 三维数组(彩色图片&am…...

科普现场!万博智云参加第五届张江汇智科普节

9月15日,第五届张江汇智科普节在汇智国际商业中心如期开展,展会中汇集了众多信息科技领域的新兴产品,展示内容主要分为国产替代和元宇宙场景展示两个方面。展现国产化最新科技成果,践行技术普惠理念,把高、精、专的技术…...

【记录】实现从Linux下载下载文件(文件导出功能)并记录过程产生的BUG问题。

前言 导出功能的实现,主要记录总结导出过程中出现的一些问题。 代码实现导出功能 public R templateDown(HttpServletResponse response) {String fileName "template.xlsx";// 清空responseresponse.reset();response.setCharacterEncoding("UTF…...

可扩展性表设计方案

文章目录 1 使用预留字段2 使用JSON字段3 使用单表继承4 构建属性表5 直接构建新表6 适当冗余 1 使用预留字段 在表设计初期,可以预留一些命名通用的备用字段,例如field1、field2、field3。当业务需要增加新字段时,就直接使用这些预留字段,无…...

Scotch: Combining SGX and SMM to Monitor Cloud Resource Usage【TEE的应用】

目录 摘要引言贡献 背景SMMXen Credit Scheduler与资源核算SGX 威胁模型Scheduler attacksResource interference attacksVM Escape attacks 架构Resource Accounting WorkflowCost of Accounting 具体的部署和评估见论文相关工作Resource Accounting基于SMM的方法基于SGX的系统…...

腾讯mini项目-【指标监控服务重构】2023-08-19

今日已办 benchmark How can we create a configuration for gobench with -benchmem – IDEs Support (IntelliJ Platform) | JetBrains 本机进行watermill-benchmark 使用 apifox 自动化测试上报固定数量的消息 启动watermill-pub/sub的 benchmark 函数 func BenchmarkPu…...

go实现grpc-快速开始

准备工作 Go, 最新版的 如果不会安装看Getting Started. Protocol buffer compiler, protoc, version 3. 想要安装, 请读Protocol Buffer Compiler Installation. 为 protocol compiler安装Go plugins: 想要安装运行以下命令: $ go install google.golang.org/protobuf/cmd/…...

linux上的init 0-6指令作用以及一些快捷键和系统指令

目录 linux上的init 0-6指令作用 CtrlAltF1-F7作用 Linux常用系统指令 查看linux内核版本 ubuntu和centos查看系统版本信息以及硬件信息 linux上的init 0-6指令作用 在Linux系统中,运行级别(也称为init级别)用来表示系统的不同状态或操作…...

Mixin 混入

Mixin 混入 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。 怎么理解呢,就是每一个组件都会有一…...

pycharm快捷键

CtrlAltL 代码规范化 CtrlHome 回到代码最开始 CtrlEnd 回到代码最后面 shift回车 鼠标任意位置的下一行 altj 一直按可以选中相同的变量 alt鼠标左键 可以选择多个需要修改的变量或值 将光标放在某一行,home到最前面,end到最后…...

【面试刷题】——Linux基础命令

Linux基础命令是在Linux操作系统中执行常见任务的一组命令。以下是一些常用的Linux基础命令,它们用于管理文件系统、执行系统任务、查看文件内容等。 文件和目录操作: ls: 列出目录中的文件和子目录。 pwd: 显示当前工作目录的路径。 cd: 更改当前工作…...

第四步 Vue2 配置ESLint

ESLint 是一个广泛使用的 JavaScript 代码检查工具,可以帮助开发者在编写代码时发现并修复潜在的问题和错误。 在 第一步 创建工程 时虽然已经选择了包含 ESLint 预设配置,但还需要做一些调整,让我们使用起来能够更加的丝滑。 vue.config.j…...

[.NET学习笔记] - Thread.Sleep与Task.Delay在生产中应用的性能测试

场景 有个Service类,自己在内部实现生产者/消费者模式。即多个指令输入该服务后对象后,Service内部有专门的消费线程执行传入的指令。每个指令的执行间隔为1秒。这里有两部分组成, 工作线程的载体。new Thread与Task.Run。执行等待的方法。…...

【单线图的系统级微电网仿真】基于 PQ 的可再生能源和柴油发电机组微电网仿真(Simulink)

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

人脸识别技术应用安全管理规定(试行)|企业采用人脸打卡方式,这4条规定值得关注

近日,为规范人脸识别技术应用,国家互联网信息办公室起草了,并向全社会公开征求意见。该规定一共列举了25条,企业如借助人脸识别技术采集考勤打卡数据,以下4条规定值得关注。 第四条 只有在具有特定的目的和充分的必要…...

leetcode 817. 链表组件(java)

链表组件 题目描述HashSet 模拟 题目描述 给定链表头结点 head,该链表上的每个结点都有一个 唯一的整型值 。同时给定列表 nums,该列表是上述链表中整型值的一个子集。 返回列表 nums 中组件的个数,这里对组件的定义为:链表中一段…...

分布式事务基础理论

基础概念 什么是事务 什么是事务?举个生活中的例子:你去小卖铺买东西,“一手交钱,一手交货”就是一个事务的例子,交钱和交货必 须全部成功,事务才算成功,任一个活动失败,事务将撤销…...

《打造高可用PostgreSQL:策略与工具》

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: &#x1f4da…...

【八大经典排序算法】快速排序

【八大经典排序算法】快速排序 一、概述二、思路实现2.1 hoare版本2.2 挖坑法2.3 前后指针版本 三、优化3.1 三数取中3.1.1 最终代码3.1.2 快速排序的特性总结 四、非递归实现快排 一、概述 说到快速排序就不得不提到它的创始人 hoare了。在20世纪50年代,计算机科学…...

vue 父组件给子组件传递一个函数,子组件调用父组件中的方法

vue 中父子组件通信,props的数据类型可以是 props: {title: String,likes: Number,isPublished: Boolean,commentIds: Array,author: Object,callback: Function,contactsPromise: Promise // or any other constructor }在父组件中,我们在子组件中给他…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...

JVM 内存结构 详解

内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: ​ 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息&#xff0…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...