pip install numpy
pip install opencv-python
pip install opencv-contrib-python
core
核心功能模块。该模块主要包含 OpenCV库的基础结构以及基本操作,例如OpenCV基础数据结构、绘图函数、数组操作相关函数、动态数据结构等calib3d:
这个模块名称是有 calibration(校准)和 3D 两个术语的缩写组合而成。包含了相机标定与立体视觉等功能,例如物体位姿估计、三维重建、摄像头标定等dnn
深度学习模块。该模块是 OpenCV4版的一个特色,主要包括:构建神经网络、加载序列化网络模型等。但这一模块目前仅适用与正向传递计算(测试网络),原则上不支持反向计算(训练网络)。
feature2d
该模块是由 feature(特征)和 2D 两个术语的缩写组合而成的,其功能主要为处理图像特征点,例如特征检测、描述、匹配等
flann
快速近似最邻近库(Fast Library for Approximate Nearest Neighbors)。该模块是高维的近似近邻快速搜索算法库,主要包含快速近似近邻搜索、聚类等
gapi
该模块是 OpenCV4.0 中新增模块,旨在加速常规的图像处理。与其他模块相比,这个模块主要充当框架,而不是某些特定的计算机视觉算法
highgui
高层 GUI,包含创建和操作显示图像的窗口、处理鼠标事件及键盘命令、提高图形交互可视化界面等
imgcodecs
图像文件读取与保存模块,主要用于图像文件读取与保存
imgproc
该模块名称是由 image(图像)和 process(处理)两个组合而成。是重要的图像处理模块,主要包含:图像滤波、几何变换、直方图、特征检测、目标检测等
ml
机器学习模块,主要包括:统计分类、回归、数据聚类等
objdetect
目标检测模块,主要用于图像的目标检测,如检测 Haar 特征
photo
计算摄像模块,只要包含图像修复、去燥等
stitching
图像拼接模块,主要包含:特征点寻找与匹配图像、估计旋转、自动校准、接缝估计等图像拼接过程的相关内容
video
视频分析模块,主要包含:运动估计、背景分离、对象跟踪等视频处理等
videoio
视频输入/输出模块,主要用于读取、写入视频 或者图像序列
# 引入OpenCV库
import cv2
# 调用摄像头进行拍照 VideoCapture(0)0为默认摄像头
cap = cv2.VideoCapture(0)
# 获取一帧图片
# 如果捕获成功,代码中ret值为真,img为捕获的图像。
ret, img = cap.read()
# 释放捕获对象
cap.release()
cv2.imread(path, 标记)
第二个参数指定图片被读取的方式:
cv2.IMREAD_COLOR
: 读入彩色图像,默认模式;cv2.IMREAD_GRAYSCALE
: 以灰度模式读入图像;cv2.IMREAD_UNCHANGED
: 加载图像包含alpha
通道。使用数字简约表示以上三种标记,分别为
1
,0
或-1
。
import cv2
image_path = "images.jpg"
img = cv2.imread(image_path,0)
import cv2
cap=cv2.VideoCapture(0)
ret,img=cap.read()
## 如果捕获成功,代码中ret值为真,img为捕获的图像。
cap.release()
if ret:
cv2.imshow('demo',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
else:
print("错误")
imshow(窗口名称, 图片对象)
import cv2
cap=cv2.VideoCapture(0)
ret,img=cap.read()
cap.release()
if ret:
cv2.imshow('demo',img)
cv2.imwrite('2.png', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
else:
print("错误")
import cv2
cap=cv2.VideoCapture(0)
ret,img=cap.read()
cap.release()
if ret:
cv2.imshow('demo',img)
cv2.imwrite('2.png', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
else:
print("错误")
cv2.imwrite(path, 图片对象)
色彩空间(Color space)
是对色彩的组织方式,是坐标系统和子空间的阐述,位于系统的每种颜色都有单个点表示。
OpenCV
中默认的色彩空间是BGR
。BGR
与RGB
的区别只是三个颜色信道的位置发生了变化,实际上原理相同。
为了更好的数字化处理颜色,提出了
HSV
,HSL
两个色彩空间。
HSV
色彩空间中,H
是色调(hue)
,S
是饱和度(saturation)
,V
是明度(value)
。
HSL
色彩空间中,H
是色调(hue)
,S
是饱和度(saturation)
,L
是亮度(lightness)
。
在
OpenCV
的灰度空间中,和一般的色彩空间相同,每一个颜色都有三个量,但是只有第一个亮度有值,所以表示为(亮度,0,0)
。其中,亮度是根据如下灰度公式计算而得:
Gray = R*0.299 + G*0.587 + B*0.114
经常用到的是以下两种:
BGR
空间到Gray
空间 的转换;BGR
空间到HSV
空间 的转换。使用的函数为:cv2.cvtColor()
。
它的函数声明为:
cv2.cvtColor(图片对象,转换类型)
对于
BGR
到Gray
的转换,使cv2.COLOR_BGR2GRAY
类型。同样的,对于
BGR
到HSV
的转换,使用cv2.COLOR_BGR2HSV
类型。
import cv2, requests
r=requests.get('https://raw.githubusercontent.com/MrHarsh10/ImageHosting-/main/img/202209062216524.jpg')
with open('pic.jpg','wb') as f:
f.write(r.content)
img=cv2.imread('pic.jpg',1)
img2=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('处理前',img)
cv2.imshow('处理后',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('test.jpg',img2)
类Harr特征
图像中的特征通常是指,图片的像素点经过一系列的运算之后得到的结果,这些结果可能是向量、矩阵和多维数据等等。类
Harr
特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征。Harr特征类别
可分为三类:边缘特征、线性特征、中心特征和对角线特征
边缘特征
线性特征
中心特征和对角线特征
OpenCV
中的人脸训练模型格式为 XML
,可以从 https://github.com/opencv/opencv/tree/master/data/haarcascades 。在此我们使用Harrcascade_frontalface_default.xml
模型检测人脸。
声明分类器:
CascadeClassifier(path)
调用分类函数:
detectMultiScale(img,scaleFactor, minNeighbors, minSize)`
参数说明:
- 图片对象:待识别图片对象;
scaleFactor
:图像缩放比例;minNeighbors
:对特征检测点周边多少有效点同时检测,这样可避免因选取的特征检测点太小而导致遗漏;minSize
:特征检测点的最小尺寸,可选参数。
import cv2
img=cv2.imread('1.png',1)
grayimg=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(grayimg, 1.2, 5)
for (x,y,w,h) in faces:
print((x,y,w,h))
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 6)
cv2.imshow('demo',img)
cv2.imwrite('out.jpg',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
import numpy as np
capture = cv2.VideoCapture(0)
if capture.isOpened():
while True:
ret, frame = capture.read()
grayimg = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(grayimg, 1.2, 5)
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.imshow('frame', frame)
if cv2.waitKey(1) == ord('q'):
capture.release()
break
cv2.destroyAllWindows()