python opencv基础使用总结
1.安装opencv库:pip install opencv-python
2.基础使用范例
import cv2
#图片的基本操作#
'''
1.读取一张图片
参数 1:图片的文件名如果图片放在当前文件夹下,直接写文件名就行,如'lena.jpg'否则需要给出绝对路径,如'D:\OpenCVSamples\lena.jpg'
参数 2:读入方式,省略即采用默认值cv2.IMREAD_COLOR:彩色图,默认值(1)cv2.IMREAD_GRAYSCALE:灰度图(0)cv2.IMREAD_UNCHANGED:包含透明通道的彩色图(-1)
'''img = cv2.imread("D:/a.png")#颜色转换为灰度图
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#先定义窗口
#cv2.namedWindow('face', cv2.WINDOW_NORMAL)
# 2.显示图片
cv2.imshow('img', img)
cv2.imshow('gray',img_gray)
cv2.waitKey(0)#获取图片属性
print(img.size)
print(img.shape)#获取脸部ROI
# face=img[89:92,180:157]
# cv2.imshow('gg',face)
# cv2.waitKey(0)#通道分隔与合并
# b,g,r= cv2.split(img)
# img=cv2.merge(b,g,r)#b = img[:,0]
#cv2.imshow('blue',b)
#cv2.waitKey(0)# 3.保存图片
#cv2.imwrite("D:/face.png", b)
print('save img success!')import cv2#打开摄像头##1.打开摄像头,并灰度显示
capture=cv2.VideoCapture(0)
# 获取捕获的分辨率
width, height = capture.get(3), capture.get(3) #capture.get():获取本地视频属性
print("width,height为:", width, height)# 以原分辨率的一倍来捕获
capture.set(cv2.CAP_PROP_FRAME_WIDTH, width * 2) #capture.set():设置本地视频属性
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, width * 2)
while(True):#获取一帧ret,frame = capture.read()#将这帧转换为灰度图gray =cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)cv2.imshow('frame',gray)if cv2.waitKey(30) == ord('q'):break# 3.保存图片
cv2.imwrite("D:/its.png", gray)
print('save img success!')import cv2#播放本地视频#播放本地视频
capture = cv2.VideoCapture('D:/名校励志演讲21.2012 巴纳德学院 奥巴马 .mp4')while(capture.isOpened()):ret,frame = capture.read()gray= cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)cv2.imshow('frame',gray)if(cv2.waitKey(30) == ord('q')):break# 3.保存图片
cv2.imwrite("D:/obama.png", gray)
print('save img success!')import cv2#录制视频#capture = cv2.VideoCapture(0)#定义编码方式并创建VideoWriter对象
fourcc=cv2.VideoWriter_fourcc(*'MJPG') #定义编码方式Fourcc
outfile=cv2.VideoWriter('D:/obama.avi',fourcc,25.,(640,480)) #25:帧率 (640,480):分辨率while(capture.isOpened()):ret,frame = capture.read()if ret:outfile.write(frame) #写入文件cv2.imshow('frame',frame)if(cv2.waitKey(1) == ord('q')):breakelse:breakprint('save success!')import cv2#图像几何变换:旋转、平移、缩放和翻转图片#img= cv2.imread('D:/a.png')#按照指定的宽度,高度缩放图片
#res=cv2.resize(img,190,189)
#按照比例缩放,如:x,y轴均放大一倍
res2= cv2.resize(img,None,fx=2,fy=2,interpolation=cv2.INTER_LINEAR)#翻转图片:第二个参数(等于0,垂直翻转;大于0,水平翻转;小于0,水平垂直翻转)
dst=cv2.flip(res2,-1)#获取行列
rows, cols = img.shape[:2]
#旋转图片,缩小一半
M=cv2.getRotationMatrix2D((cols/2,rows/2),45,0.5)
wp=cv2.warpAffine(dst,M,(cols,rows)) #平移/旋转,靠仿射变换cv2.warpAffine()实现的#cv2.imshow('shrink',res)
# cv2.imshow('zoom',dst)cv2.imshow('rotation',wp)
cv2.waitKey(0)# 3.保存图片
cv2.imwrite("D:/face.png",dst)
print('save img success!')import cv2
import numpy as np#绘图 cv2.line(), cv2.circle(), cv2.rectangle(), cv2.ellipse(), cv2.putText()##画线#
#创建黑色图片
img =np.zeros((512,512,3),np.uint8)
#画一条线
cv2.line(img,(0, 0), (512, 512), (255, 0, 0), 5)#画矩形
cv2.rectangle(img,(384, 0), (510, 128), (0, 255, 0), 3)#画圆
cv2.circle(img,(447, 63), 63, (0, 0, 255), -1)#画椭圆
cv2.ellipse(img,(256, 256), (100, 50), 0, 0, 180, (255, 0, 0), -1)#多边形
# 定义四个顶点坐标
pts = np.array([[10, 5], [50, 10], [70, 20], [20, 30]], np.int32)
# 顶点个数:4,矩阵变成 4*1*2 维
pts = pts.reshape((-1, 1, 2))
cv2.polylines(img, [pts], True, (0, 255, 255))# 使用 cv2.polylines() 画多条直线
line1 = np.array([[100, 20], [300, 20]], np.int32).reshape((-1, 1, 2))
line2 = np.array([[100, 60], [300, 60]], np.int32).reshape((-1, 1, 2))
line3 = np.array([[100, 100], [300, 100]], np.int32).reshape((-1, 1, 2))
cv2.polylines(img,[line1, line2, line3], True, (0, 255, 255))#添加文字
font =cv2.FONT_HERSHEY_COMPLEX
cv2.putText(img,'China!!',(10,500),font,4, (255, 255, 255), 2, lineType=cv2.LINE_AA)cv2.imshow('paint',img)
cv2.waitKey(0)
3.人脸检测实现
首先在opencv官网下载opencv pc版的安装包
Releases - OpenCV

其次,安装下载包,找到人脸检测的xml文件,如下:

注意:这些xml文件,可用于检测静止图像、视频和摄像所得到图像中的人脸
人脸检测特征数据文件

代码实现
import cv2def fac_detect_demo(img):#将图片转换为灰度图片gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#加载特征数据face_detector=cv2.CascadeClassifier('D:/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')faces=face_detector.detectMultiScale(gray)# x,y为起始坐标,w,h为宽高for x,y,w,h in faces:# (x,y),(x+w,y+h)分别为左上角,右下角,矩形颜色为(0,255,0)即绿色;thickness=2为矩形的边框cv2.rectangle(img,(x,y),(x+w,y+h),color=(0,255,0),thickness=2) cv2.imshow('reuslt:',img)#人脸检测-图片单张人脸#1.加载图片
img = cv2.imread("D:/aa.png")#2.人脸检测
fac_detect_demo(img)cv2.waitKey(0)
cv2.destroyAllWindows() #释放内存空间
效果如下:

import cv2def fac_detect_demo(img):#将图片转换为灰度图片gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#加载特征数据face_detector=cv2.CascadeClassifier('D:/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')faces=face_detector.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=3,maxSize=(50,50)) #进行人脸检测# x,y为起始坐标,w,h为宽高for x,y,w,h in faces:print(x,y,w,h)# (x,y),(x+w,y+h)分别为左上角,右下角,矩形颜色为(0,0,255)即红色;thickness=2为矩形的边框cv2.rectangle(img,(x,y),(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('reuslt:',img)#人脸检测-图片多张脸#1.加载图片
img = cv2.imread("D:/aaa.png")#2.调用人脸检测方法
fac_detect_demo(img)
cv2.waitKey(0)
cv2.destroyAllWindows() #释放内存空间
效果如下:

人脸检测-视频中人脸识别
import cv2def face_detect_demo(img):# 将图片转换为灰度图片gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 加载特征数据face_detector = cv2.CascadeClassifier('D:/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')faces = face_detector.detectMultiScale(gray,maxSize=(210,210),minSize=(120,120)) # 进行人脸检测# x,y为起始坐标,w,h为宽高for x, y, w, h in faces:print(x, y, w, h)# (x,y),(x+w,y+h)分别为左上角,右下角,矩形颜色为(0,0,255)即红色;thickness=2为矩形的边框cv2.rectangle(img, (x, y), (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('reuslt:', img)#人脸检测-视频中人脸识别
#读取视频
cap= cv2.VideoCapture('D:/名校励志演讲21.2012 巴纳德学院 奥巴马 .mp4')
while True:flag,frame= cap.read()if not flag: #读到视频结尾,breakbreakface_detect_demo(frame)if ord('q')==cv2.waitKey(10):break
cv2.destroyAllWindows()
cap.release()
效果如下:

训练人脸数据
import osimport cv2
import numpy as np
from PIL import Image#训练数据def getImageAndLabels(path):facesSamples=[]ids=[]imagePaths=[os.path.join(path,f) for f in os.listdir(path)]#检测人脸face_detector = cv2.CascadeClassifier('D:/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')#遍历列表中的图片for imagePath in imagePaths:#打开图片PIL_img=Image.open(imagePath).convert('L')#将图像转换为数组img_numpy=np.array(PIL_img,'uint8')faces = face_detector.detectMultiScale(img_numpy) #获取人脸#获取每张图片的id# print(os.path.split(imagePath))id=int(os.path.split(imagePath)[1].split('.')[0])for x, y, w, h in faces:facesSamples.append(img_numpy[y:y+h,x:x+w])ids.append(id)return facesSamples,idsif __name__=='__main__':#1.图片路径path='./data/img/'#2.获取图像数组和id标签数组faces,ids=getImageAndLabels(path)#3.获取训练对象recognizer = cv2.face.LBPHFaceRecognizer_create()recognizer.train(faces,np.array(ids))#4.保存训练数据到文件recognizer.write('trainer/trainer.yml')
人脸识别
import cv2.face
#人脸识别##加载训练的数据文件
recognizer=cv2.face.LBPHFaceRecognizer_create()
recognizer.read('trainer/trainer.yml')
#准备识别的图片
img=cv2.imread('D:/obama.png')
#对图片进行灰度
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 加载特征数据
face_detector = cv2.CascadeClassifier('D:/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
faces = face_detector.detectMultiScale(gray) # 进行人脸检测
# x,y为起始坐标,w,h为宽高
for x, y, w, h in faces:# print(x, y, w, h)# (x,y),(x+w,y+h)分别为左上角,右下角,矩形颜色为(0,255,0)即绿色;thickness=2为矩形的边框cv2.rectangle(img, (x, y), (x + w, y + h), color=(0,255,0), thickness=2)#人脸识别id,confidence=recognizer.predict(gray[y:y+h,x:x+w])print("标签id:",id,"置信评分:",confidence)
cv2.imshow('reuslt:', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
相关文章:
python opencv基础使用总结
1.安装opencv库:pip install opencv-python 2.基础使用范例 import cv2 #图片的基本操作#1.读取一张图片 参数 1:图片的文件名如果图片放在当前文件夹下,直接写文件名就行,如lena.jpg否则需要给出绝对路径,如D:\Ope…...
【已解决】TypeError: AsyncConnectionPool.__init__(), new install bug, httpx==0.24.1
1,参考社区链接,首先降低gradio版本,降低到4以下,但是也不能降太低,也不能太高,要适中,推荐版本3.39.0 pip install gradio3.39.0 2,下载正确的httpx版本 参考社区链接࿰…...
react中如何获取真实的dom
在 React 中,获取真实的 DOM 元素通常通过 ref 来实现。ref 是一个特殊的属性,用于引用组件或 DOM 元素的实例。你可以通过 ref 获取到组件的真实 DOM 元素或组件实例。 1. 函数组件中的 useRef 在函数组件中,获取 DOM 元素的引用需要使用 …...
HTTP协议 (爬虫)
本质上 协议就是两个计算机协商好相互沟通的方式 计算机传输的数据是0or1 需要协商好数据的规则。HTTP协议是传输网站相关的东西的。 HTTP把一条消息分成三个部分 请求: 请求行:请求方式(get、post) 请求URL 协议 请求头&a…...
Python elasticsearch客户端连接常见问题整理
python 访问 elasticsearch 在python语言中,我们一般使用 pip install elasticsearch 软件包,来访问es服务器。 正确用法 本地安装elasticsearch时,应指定与服务端相同的大版本号: pip install elasticsearch7.17.0然后就可以…...
清华大学KVCache.AI团队联合趋境科技联合的KTransformers开源项目为什么那么厉害
KTransformers是一个由清华大学KVAV.AI团队开发的开源项目,旨在优化大语言模型(LLM)的推理性能,特别是在有限显存资源下运行大型模型。以下是KTransformers的详细介绍: 1. 核心特点 高性能优化:KTransfor…...
matlab模拟风场的随机脉动风
1、内容简介 matlab137-模拟风场的随机脉动风 可以交流、咨询、答疑 2、内容说明 略 模拟风场的随机脉动风,并进行相关的统计分析和计算,包括风速谱、空间相关性、自谱、互谱、以及POD(Proper Orthogonal Decomposition)分解等…...
Code::Blocks 创建 C 项目 二
Code::Blocks 创建 C 项目 二 Code::Blocks 安装请看 Code::Blocks 安装 启动 Code Blocks 选择 Create a new project 弹出界面选择 Projects -> Console application -> Go 选择 C :表示创建的是 C 语言项目 点击 Next Project title:项目名 …...
Javascript网页设计案例:通过PDF.js实现一款PDF阅读器,包括预览、页面旋转、页面切换、放大缩小、黑夜模式等功能
前言 目前功能包括: 切换到首页。切换到尾页。上一页。下一页。添加标签。标签管理页面旋转页面随意拖动双击后还原位置 其实按照自己的预期来说,有很多功能还没有开发完,配色也没有全都搞完,先发出来吧,后期有需要…...
【IoTDB 线上小课 11】为什么 DeepSeek 要选择开源?
新年新气象,【IoTDB 视频小课】第十一期全新来临! 关于 IoTDB,关于物联网,关于时序数据库,关于开源... 一个问题重点,3-5 分钟,我们讲给你听: 开源“加成”再次展现! 现在…...
【ESP32】ESP-IDF开发 | WiFi开发 | HTTPS服务器 + 搭建例程
1. 简介 1.1 HTTPS HTTPS(HyperText Transfer Protocol over Secure Socket Layer),全称安全套接字层超文本传输协议,一般理解为HTTPSSL/TLS,通过SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信…...
ollama离线环境部署deepseek及对话网站开发
ollama离线环境部署deepseek及局域网对话网站开发 需要在离线环境下面部署deepseek大模型,而且局域网内用户能在浏览器直接对话,主机的操作系统是win10 经不断探索,找到一条能走通的路,大致流程和思路如下: 局域网服…...
【Unity】 HTFramework框架(六十)Assistant助手(在Unity中接入DeepSeek等AI语言大模型)
更新日期:2025年2月14日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 Assistant助手安装Ollama使用Assistant(在编辑器中)打开Assistant配置Assistant使用Assistant处理Assistant回复的内容使用推理大…...
Spring AI集成DeepSeek,实现流式输出
前面一篇文章我们实现了《Spring AI集成DeepSeek:三步搞定Java智能应用》,大模型的响应速度是很慢的,为了提升用户体验,我们通常会使用流式输出一点点将结果输出给用户。先看下效果: 在 SpringBoot 中实现流式输出可以…...
LeetCode 1299.将每个元素替换为右侧最大元素:倒序遍历,维护最大值,原地修改
【LetMeFly】1299.将每个元素替换为右侧最大元素:倒序遍历,维护最大值,原地修改 力扣题目链接:https://leetcode.cn/problems/replace-elements-with-greatest-element-on-right-side/ 给你一个数组 arr ,请你将每个…...
搭建一个经典的LeNet5神经网络
第一章:计算机视觉中图像的基础认知 第二章:计算机视觉:卷积神经网络(CNN)基本概念(一) 第三章:计算机视觉:卷积神经网络(CNN)基本概念(二) 第四章:搭建一个经典的LeNet5神经网络 一、LeNet-5背景 LeNet-…...
我用Ai学Android Jetpack Compose之CircularProgressIndicator
答案来自 通义千问 Q: 我想学习CircularProgressIndicator,麻烦你介绍一下 当然可以!CircularProgressIndicator 是 Jetpack Compose 中的一个组件,用于显示一个循环的圆形进度条。它非常适用于需要指示加载状态或进程完成度的场景。接下来…...
DeepSeek-R1:通过强化学习激励大型语言模型的推理能力
摘要 我们介绍了第一代推理模型DeepSeek-R1-Zero和DeepSeek-R1。DeepSeek-R1-Zero是一个通过大规模强化学习(RL)训练而成的模型,无需监督微调(SFT)作为初步步骤,展示了卓越的推理能力。通过RL,DeepSeek-R1-Zero自然涌现出许多强大而有趣的推理行为。然而,它也面临诸如…...
为什么要选择3D机器视觉检测
选择3D机器视觉检测的原因主要包括以下几点: 高精度测量 复杂几何形状:能够精确测量复杂的三维几何形状。 微小细节:可捕捉微小细节,适用于高精度要求的行业。全面数据获取 深度信息:提供深度信息,弥补2D视…...
Unity 编辑器热更C# FastScriptReload
工具源码:https://github.com/handzlikchris/FastScriptReload 介绍 用于运行时修改C#后能快速重新编译C#并生效,避免每次改C#,unity全部代码重新编译,耗时旧且需要重启游戏。 使用 需要手动调整AssetPipeline自动刷新模式&…...
DeepSeek在linux下的安装部署与应用测试
结合上一篇文章,本篇文章主要讲述在Redhat linux环境下如何部署和使用DeepSeek大模型,主要包括ollama的安装配置、大模型的加载和应用测试。关于Open WebUI在docker的安装部署,Open WebUI官网也提供了完整的docker部署说明,大家可…...
VNC远程控制Mac
前言 macOS系统自带有VNC远程桌面,我们可以在控制端上安装配置VNC客户端,以此来实现远程控制macOS。但通常需要在不同网络下进行远程控制,为此,我们可以在macOS被控端上使用cpolar做内网穿透,映射VNC默认端口5…...
Next.js国际化:next-i18next
引言 next-i18next 是专门为 Next.js 项目量身定制的国际化解决方案,它基于强大的 i18next 库,能帮助开发者轻松地为 Next.js 应用添加多语言支持 next-i18next 初相识 项目简介 next-i18next 是一个专为 Next.js 应用程序打造的国际化解决方案&#…...
计算机视觉:卷积神经网络(CNN)基本概念(一)
第一章:计算机视觉中图像的基础认知 第二章:计算机视觉:卷积神经网络(CNN)基本概念(一) 第三章:计算机视觉:卷积神经网络(CNN)基本概念(二) 第四章:搭建一个经典的LeNet5神经网络 一、引言 卷积神经网络&…...
Python的那些事第二十三篇:Express(Node.js)与 Python:一场跨语言的浪漫邂逅
摘要 在当今的编程世界里,Node.js 和 Python 像是两个性格迥异的超级英雄,一个以速度和灵活性著称,另一个则以强大和优雅闻名。本文将探讨如何通过 Express 框架将 Node.js 和 Python 结合起来,打造出一个高效、有趣的 Web 应用。我们将通过一系列幽默风趣的实例和表格,展…...
核货宝外贸订货系统:批发贸易企业出海的强劲东风
在全球贸易一体化的汹涌浪潮中,批发贸易企业正积极探寻海外市场的广阔天地,试图开辟新的增长版图。然而,出海之路绝非坦途,众多难题如暗礁般潜藏在前行的航道上。从复杂繁琐的跨境交易流程、变幻莫测的国际市场需求,到…...
最新智能优化算法: 阿尔法进化(Alpha Evolution,AE)算法求解23个经典函数测试集,MATLAB代码
一、阿尔法进化算法 阿尔法进化(Alpha Evolution,AE)算法是2024年提出的一种新型进化算法,其核心在于通过自适应基向量和随机步长的设计来更新解,从而提高算法的性能。以下是AE算法的主要步骤和特点: 主…...
数据结构与算法面试专题——堆排序
完全二叉树 完全二叉树中如果每棵子树的最大值都在顶部就是大根堆 完全二叉树中如果每棵子树的最小值都在顶部就是小根堆 设计目标:完全二叉树的设计目标是高效地利用存储空间,同时便于进行层次遍历和数组存储。它的结构使得每个节点的子节点都可以通过简…...
MongoDB索引介绍
索引简述 索引是什么 索引在数据库技术体系中占据了非常重要的位置,其主要表现为一种目录式的数据结构,用来实现快速的数据查询。通常在实现上,索引是对数据库表(集合)中的某些字段进行抽取、排列之后,形成的一种非常易于遍历读取…...
【一文读懂】WebRTC协议
WebRTC(Web Real-Time Communication)协议 WebRTC(Web Real-Time Communication)是一种支持浏览器和移动应用程序之间进行 实时音频、视频和数据通信 的协议。它使得开发者能够在浏览器中实现高质量的 P2P(点对点&…...
