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 }在父组件中,我们在子组件中给他…...
docker 获取Nvidia 镜像 | cuda |cudnn
本文分享如何使用docker获取Nvidia 镜像,包括cuda10、cuda11等不同版本,cudnn7、cudnn8等,快速搭建深度学习环境。 1、来到docker hub官网,查看有那些Nvidia 镜像 https://hub.docker.com/r/nvidia/cuda/tags?page2&name11.…...
uTool快捷指令
send("************"); quickcommand.sleep(200); keyTap("enter");...
R reason ‘拒绝访问‘的解决方案
Win11系统 安装rms的时候报错: Error in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck vI[[j]]) : namespace Matrix 1.5-4.1 is already loaded, but > 1.6.0 is required## 安装rms的时候报错,显示Matrix的版本太低…...
许战海战略文库|品类缩量时代:制造型企业如何跨品类打造份额产品?
所有商业战略的本质是围绕着竞争优势与竞争效率展开的。早期,所有品牌立足于从局部竞争优势出发。因此,品牌创建初期大多立足于单个品类。后期增长受限,就要跨品类持续扩大竞争优势,将局部竞争优势转化为长期竞争优势,如果固化不前很难获得增…...
BIT-4-数组
一维数组的创建和初始化一维数组的使用 一维数组在内存中的存储 二维数组的创建和初始化二维数组的使用二维数组在内存中的存储 数组越界数组作为函数参数数组的应用实例1:三子棋 数组的应用实例2:扫雷游戏 1. 一维数组的创建和初始化 1.1 数组的创建 …...
L9945的H桥续流模式
在H桥的配置中,包括两种续流模式:主动续流和被动续流。 一个L9945可输出两个H桥驱动。HB1在CMD3中配置,HB2在CMD7中配置。 主动续流:通过Q3的MOS的二极管来续流 被动续流:通过Q3外部的二极管来续流...
Ubuntu20.04安装Nvidia显卡驱动、CUDA11.3、CUDNN、TensorRT、Anaconda、ROS/ROS2
1.更换国内源 打开终端,输入指令: wget http://fishros.com/install -O fishros && . fishros 选择【5】更换系统源,后面还有一个要输入的选项,选择【0】退出,就会自动换源。 2.安装NVIDIA驱动 这一步最痛心…...
linux下使用crontab定时器,并且设置定时不执行的情况,附:项目启动遇到的一些问题和命令
打开终端,以root用户身份登录。 运行以下命令打开cron任务编辑器: crontab -e 如果首次编辑cron任务,会提示选择编辑器。选择你熟悉的编辑器,比如nano或vi,并打开相应的配置文件。 在编辑器中,添加一行类…...
linux下二进制安装docker最新版docker-24.0.6
一.基础环境 本次实操是公司技术培训下基于centos7.9操作系统安装docker最新版docker-24.0.6,下载地址是:https://download.docker.com/linux/static/stable/x86_64/docker-24.0.6.tgz 二. 下载Docker压缩包 mkdir -p /opt/docker-soft cd /opt/docker…...
计算机视觉 01(介绍)
一、深度学习 1.1 人工智能 1.2 人工智能,机器学习和深度学习的关系 机器学习是实现人工智能的一种途径,深度学习是机器学习的一个子集,也就是说深度学习是实现机器学习的一种方法。与机器学习算法的主要区别如下图所示[参考:黑…...
产品介绍网站设计怎么做/安卓优化大师老版本下载
转载请标明地址 QuincySx: http://www.jianshu.com/p/a6554196fd78 开始中可能遇到比较恶心的Activity跳转 比如在库中Activity中向另一个库中跳转 接下来说一种优雅的方式 在目的Activity的AndroidManifest文件中Activity声明处加上如下语句 <intent-filter>…...
商城类网站和o2o网站/最近的新闻摘抄
题目大意 给出一个整数n(1<n<200)n (1 < n < 200)n(1<n<200)。 求出任意一个它的倍数m,要求m必须只由十进制的 0 或 1 组成。 思路分析 首先暴力枚举肯定是不可能的 1000ms 想不超时都难,而且枚举还要解决大数问题。 解题方法&am…...
怎么做广告宣传效果好/seo关键词排名优化是什么
2019独角兽企业重金招聘Python工程师标准>>> 对于每一个iOS开发人员来说,最终无疑就是将自己开发的APP上线到AppStore,让更多的人去用自己写的软件。 试想一下,哪天走在街上看到某个人在用你写的音乐软件听着歌,那是一…...
电影网站制作教程好不好/成都新闻最新消息
Java: Unresolved compilation problem的解决方法参考文章: (1)Java: Unresolved compilation problem的解决方法 (2)https://www.cnblogs.com/programmer1/p/4411080.html 备忘一下。...
做网站需要会的软件/东莞网站营销推广
楼主电脑系统状况:win10主系统,128固态为ubuntu系统 安装一共为两次。 第一次出现ubuntu安装成功后没有声音,主系统win10有声音,Ubuntu上检测不到声卡,说明ubuntu对声卡没有正确识别,楼主是hdmi和独显。网上…...
网站做不下去/营销策略都有哪些
工作流概述 在一个公司中,每一项业务的开始和结束,都可以理解为一个工作流,例如,公司的费用报销的基本流程如下: 如图所示的工作流:员工先提出费用报销申请,提交该申请给部门领导,部…...