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() # 销毁内存

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))

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倍

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()

优化:
- 黑白色更容易识别
- 识别效果系数整
# -*- 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()

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()

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))

相关文章:
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: 📚…...
【八大经典排序算法】快速排序
【八大经典排序算法】快速排序 一、概述二、思路实现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 }在父组件中,我们在子组件中给他…...
成都美容院灯箱技术白皮书:2024年行业趋势与落地实践指南
美容院灯箱:不只是照明,更是品牌灵魂的窗口走进任何一条成都的商业街,你很难忽视那些光彩夺目的美容院灯箱。它们不仅仅是照明工具,更是品牌形象的第一道防线。有趣的是,很多人会误以为灯箱只是‘打个光’那么简单&…...
2026前端面试题
1.vue的通信方式Vue组件通信方式根据组件间的关系(父子、兄弟、跨级、任意组件)可分为多种方案。一、父子组件通信props(父-子)父组件通过属性向子组件传递数据,子组件通过defineProps接收<!-- 父组件 --> <C…...
fft npainting lama图像修复系统:5分钟上手,轻松去除图片水印和杂物
FFT Npainting Lama图像修复系统:5分钟上手,轻松去除图片水印和杂物 1. 系统概述 1.1 什么是FFT Npainting Lama FFT Npainting Lama是一款基于深度学习的图像修复工具,能够智能移除图片中的水印、杂物和不需要的物体。它结合了快速傅里叶…...
小白也能学会:MogFace透明蒙版可视化,人脸检测不再难
小白也能学会:MogFace透明蒙版可视化,人脸检测不再难 1. 为什么需要透明蒙版可视化? 想象一下这样的场景:你拍了一张全家福,想用AI工具检测照片中有多少人。传统的检测工具会在每个人脸上画一个绿色的方框࿰…...
抖音批量下载助手:轻松管理您的抖音视频资源库
抖音批量下载助手:轻松管理您的抖音视频资源库 【免费下载链接】douyinhelper 抖音批量下载助手 项目地址: https://gitcode.com/gh_mirrors/do/douyinhelper 还在为手动保存抖音视频而烦恼吗?抖音批量下载助手正是您需要的效率工具!这…...
突破语言壁垒:Unity游戏翻译破局工具如何重构跨文化体验
突破语言壁垒:Unity游戏翻译破局工具如何重构跨文化体验 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 当你满怀期待地启动一款国际热门Unity游戏,却被满屏陌生文字阻挡了探索脚步…...
DanKoe 视频笔记:每日60分钟改变生活:引言与概述
在本教程中,我们将学习如何通过每天投入60分钟来系统地改变生活。我们将探讨常规的重要性,并介绍三个核心习惯,帮助你重新掌控精力、提升财务状况、改善健康以及获得内心的清晰。 每日60分钟改变生活:2:常规的必要性 …...
Phi-4-mini-reasoning企业落地案例:集成至内部知识库的逻辑问答模块
Phi-4-mini-reasoning企业落地案例:集成至内部知识库的逻辑问答模块 1. 项目背景与需求 企业内部知识库系统通常面临一个共同挑战:员工在查找专业问题时,往往需要花费大量时间筛选信息,特别是涉及数学计算、逻辑推理等需要多步分…...
别只盯着训练!DeePMD-kit模型压缩(graph.pb)实战:让分子动力学模拟速度提升10倍
突破计算瓶颈:DeePMD-kit模型压缩技术实战指南 当你在分子动力学模拟中投入数周时间训练出一个高精度DeePMD模型后,是否遇到过这样的困境:想要扩大模拟体系规模或延长模拟时间,却受限于计算资源的瓶颈?模型压缩技术正是…...
mxbai-embed-large-v1 应用开发:从零构建智能文档检索系统
mxbai-embed-large-v1 应用开发:从零构建智能文档检索系统 1. 项目概述与核心价值 mxbai-embed-large-v1 是由 mixedbread-ai 开发的高性能文本嵌入模型,在 MTEB 基准测试中超越了 OpenAI text-embedding-3-large 等商业模型。该模型能够将文本转换为高…...
