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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++17 数学特殊函数:探索标准库中的强大工具

文章目录 1. 什么是数学特殊函数?2. C17 中的特殊函数2.1 贝塞尔函数2.2 勒让德函数2.3 椭圆积分2.4 伽马函数2.5 误差函数 3. 实际应用场景3.1 科学计算3.2 工程应用3.3 数据分析 4. 总结 在 C17 中,标准库引入了一系列数学特殊函数,这些函数…

mysql多主集群 galera cluster for mysql 8安装配置启动重启集群

[TOC] 一、安装mysql 1、安装 系统环境: Ubuntu 18.04 64位 MySQL 8.0.19 下载MySQL APT安装配置包 首先访问 https://dev.mysql.com/downloads/repo/apt/ 获取配置包下载地址 wget https://dev.mysql.com/get/mysql-apt-config_0.8.14-1_all.deb sudo dpkg -i mysq…

面向长范围交互式 LLM 智体的强化学习

25年2月来自 Apple 的论文“Reinforcement Learning for Long-Horizon Interactive LLM Agents”。 交互式数字智体 (IDA) 利用状态数字环境的 API 来执行任务以响应用户请求。虽然由指令调整的大语言模型 (LLM) 驱动 IDA 可以对多步交换中接口调用的反馈做出反应,…

sql语言语法的学习

sql通用语法 sql分类 DDL(操作数据库和表) 操作数据库 操作表_查询 操作表_创建 举例: 操作表_删除 操作表_修改 DML(增删改表中数据) DML添加数据 DML删除数据 DML修改数据 DQL 单表查询 基础查询 条件查询 案例演示: 排序查询 聚合函数 分组查询…

kkFileView二开之pdf转图片接口

kkFileView二开之Pdf转图片接口 kkFileView二开系列文章:1 kkFileView源码下载及编译2 Pdf转图片接口2.1 背景2.2 分析2.2 接口开发2.2.1 编写Pdf转图片方法2.2.2 编写转换接口 2.3 接口测试2.3.1 Pdf文件准备2.3.2 pdf2Image 3 部署 kkFileView二开系列文章&#x…

Electron 客户端心跳定时任务调度库调研文档 - Node.js 任务调度库技术调研文档

Electron 客户端心跳定时任务调度库调研文档 - Node.js 任务调度库技术调研文档 本文将对七个流行的定时任务调度库:node-cron、rxjs、bull、node-schedule、agenda、bree、cron。这些库都可以用来处理定时任务,但它们的特点和适用场景有所不同。我们将从…

驱动开发系列37 - Linux Graphics 2D 绘制流程(二)- 画布创建和窗口关联

一:概述 前面介绍Pixmap表示一块画布,是绘制发生的地方,本节看看驱动程序如何为画布分配内存/显存,以及如何与窗口关联的。 二:为画布分配BO 在系统启动时(用户登录系统之后,会重启Xorg),在 Xorg 服务器初始化时,要为屏幕创建根窗口的 Pixmap,并绑定到 GPU framebu…

Numpy简易入门

1.1 认识Numpy数组对象 1.1.1 导入NumPy工具包 #导包并起别名为np import numpy as np1.1.2 创建一个三行五列的数组 data np.arange(15).reshap(3, 5)打印结果&#xff1a; 1.1.3 查询data类型 print(type(data))打印结果&#xff1a; <class numpy.ndarray> nda…

【设计模式】【行为型模式】访问者模式(Visitor)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 欢迎点赞、收藏、关注&#xff0c;跟上我的更新节奏 &#x1f3b5; 当你的天空突…

建筑兔零基础自学python记录22|实战人脸识别项目——视频人脸识别(下)11

这次我们继续解读代码&#xff0c;我们主要来看下面两个部分&#xff1b; 至于人脸识别成功的要点我们在最后总结~ 具体代码学习&#xff1a; #定义人脸名称 def name():#预学习照片存放位置path M:/python/workspace/PythonProject/face/imagePaths[os.path.join(path,f) f…

源代码防泄密沙箱是啥意思?

SDC沙盒通过多种技术手段实现环境隔离&#xff0c;从而有效防止数据泄露。以下是其具体的隔离机制&#xff1a; 1. 创建隔离的加密沙盒 SDC沙盒在员工电脑上虚拟出一个对外隔绝的加密沙盒。这个沙盒会主动与服务器进行认证对接&#xff0c;形成服务器-客户端沙盒这样一个涉密…

【复现DeepSeek-R1之Open R1实战】系列4:SFT和GRPO源码逐行深度解析(上)(3万字长文,从零开始到入门,包含详细的拓展基础知识)

目录 1 前言1.1 Open R1项目简介1.2 主要步骤1.3 原理图 2 基础知识2.1 Vocabulary和Tokenizer2.1.1 vocab.json, tokenizer.json, tokenizer_config.json2.1.2 什么是tokenizer2.1.3 在哪一步将tokenizer转成embedding2.1.4 tokenizer的代码实现 2.2 SFT和GRPO2.2.1 SFT2.2.2 …

课题推荐:高空长航无人机多源信息高精度融合导航技术研究

高空长航无人机多源信息高精度融合导航技术的研究&#xff0c;具有重要的理论意义与应用价值。通过深入研究多源信息融合技术&#xff0c;可以有效提升无人机在高空复杂环境下的导航能力&#xff0c;为无人机的广泛应用提供强有力的技术支持。希望该课题能够得到重视和支持&…

python_excel批量插入图片

提取excel的指定列的值的后4位&#xff08;数值&#xff09;&#xff0c;在其它列名的单元格中&#xff0c;批量嵌入与该数值匹配的图片&#xff08;未实现居中&#xff09;&#xff0c;每间隔4行处理一次&#xff08;合并过单元格&#xff09;。 import pandas as pd from ope…

DeepSeek 助力 Vue 开发:打造丝滑的颜色选择器(Color Picker)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

Jenkinsdebug:遇到ERROR: unable to select packages:怎么处理

报错信息&#xff1a; 报错信息解释&#xff1a; musl-1.2.5-r0 和 musl-dev-1.2.5-r1: 这里说明 musl-dev 需要一个特定版本的 musl&#xff0c;即 musl1.2.5-r1&#xff0c;但是当前版本的 musl&#xff08;1.2.5-r0&#xff09;并不满足这个条件。版本冲突: 当尝试安装新…

并查集基础+优化(下标从0开始)

#include<iostream> #include<algorithm> #include<vector> using namespace std; const int N 1e510; int n,m; int fa[N]; void set(int u,int v) {fa[v] u; } int find(int arr[],int i) {while(arr[i] ! -1){i arr[i]; } return i;//返回的是这个节点…

STM32创建静态库lib

创建静态库lib 1. 新建工程1.1 创建工程文件夹1.2 编写用户相关代码1.2.1 stm32f4xx_it.h1.2.2 stm32f4xx_it.c1.2.3 标准库配置&#xff1a;stm32f4xx_conf.h1.2.4 HAL库的配置&#xff1a;stm32f4xx_hal_conf.h1.2.5 LL库配置&#xff1a;stm32f4xx_ll_conf.h 1.3 移植通用文…

CV -- 基于GPU版显卡CUDA环境+Pycharm YOLOv8 检测

目录 下载 CUDA 下载 cuDNN 下载 anaconda 安装 PyTorch pycharm 搭配 yolo 环境并运行 阅读本文须知&#xff0c;需要电脑中有 Nvidia 显卡 下载 CUDA 打开 cmd &#xff0c;输入 nvidia-smi &#xff0c;查看电脑支持 CUDA 版本&#xff1a; 我这里是12.0&#xff0c;进入…

MATLAB图像处理:图像分割方法

图像分割将图像划分为具有特定意义的子区域&#xff0c;是目标检测、医学影像分析、自动驾驶等领域的核心预处理步骤。本文讲解阈值分割、边缘检测、区域生长、聚类分割、基于图的方法等经典与前沿技术&#xff0c;提供MATLAB代码实现。 目录 1. 图像分割基础 2. 经典分割方…