本节有课程ppt,百度网盘


知识点记录:
- 人脸检测face detection 与 人脸识别 face recognization 不一致
- 人脸识别的另一个应用:makeup化妆,不仅需要人脸检测还需要关键点检测
- 其余典型的应用:手势识别,AI换脸,活体检测,等等。
1. computer version的由来



算法:越快越好,越准越好。
计算机视觉:自动化的完成图像的采集、处理、保存、显示过程,像视觉一样看到并决策。
灰度图,0/1(视觉上是全黑), 0-255(黑白图)
彩色图:RGB 3个channel

opencv 以BGR读取矩阵,要将图片咋转换成RGB。 cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
在矩阵中对图像进行操作



如果第三列变成tx,ty。 就是缩放带平移。

2.代码实战
2.1 添加水印
from PIL import Imageimport osimport sys#创建底图target = Image.new('RGBA', (300, 300), (0, 0, 0, 0))#打开头像#nike_image = Image.open("./image1.png")nike_image = Image.open("./0.png")nike_image = nike_image.resize((300, 300))#打开装饰#hnu_image = Image.open("./hnu.png")hnu_image = Image.open("./water1.png")hnu_image = hnu_image.resize((300, 300))# 分离透明通道#r,g,b,a = hnu_image.split()r,g,b = hnu_image.split()# 将头像贴到底图nike_image.convert("RGBA")target.paste(nike_image, (0,0))#将装饰贴到底图hnu_image.convert("RGBA")target.paste(hnu_image,(0,0), mask=r*0.1)# 保存图片target.save("f.png")
2.2 生成矩阵的形式生成图片
import numpy as npimport matplotlib.pyplot as plt%matplotlib inlineimg0 = np.array([[1,1,1],[0,1,0],[1,0,0]])# color mapplt.imshow(img0,cmap = 'gray' )# color map # https://blog.csdn.net/zhang_cherry/article/details/88951259#plt.imshow(img0)
2.3 从摄像头采集图像
cap = cv2.VideoCapture(0)print(cap.isOpened())return_value,frame=cap.read()print(frame.shape)print(return_value)#plt.imshow(frame)plt.imshow( cv2.cvtColor(frame,cv2.COLOR_BGR2RGB))# 等价于plt.imshow( cv2.cvtColor(frame,4)) 还有cv2.COLOR_RGB2BGR# 关闭capture, 成功输出图片后,电脑的摄像头会一直保持开启状态cap.release()
直接调用摄像头,输出图像。 需要连续调用时,可以在外层加个循环。
2.3 从文件读取图像数据
img = cv2.imread("lena.jpg")#cv2.cvtColor()#cv2.COLOR_BGR2RGBimg = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)plt.imshow(img)# 黑白图像img_gray=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)plt.imshow(img_gray,cmap='gray')# RGB2HSV img_hsv=cv2.cvtColor(img_BGR,cv2.COLOR_BGR2HSV)
## 二值化import cv2img = cv2.imread('lena.jpg')plt.imshow(cv2.threshold(img,128,200,cv2.THRESH_BINARY))## 图像的放大与缩小img =cv2.resize(img,(1000,2000))## 剪裁img_roi =img[100:300,0:200]## 移动#M = np.float32([[2,-0.1,300],[0.2,1,400]]) 根据理论公式,进行旋转,平移,透视等任务theta = -30/180*3.14M = np.float32([[np.cos(theta),-np.sin(theta),100],[np.sin(theta),np.cos(theta),400]])plt.imshow(img)print(img.shape)img_1=cv2.warpAffine(img,M,(1300,2200))plt.imshow(img_1)#print(img_1[200+50,300])## 图像的旋转变换与拉伸变换pts1 = np.float32([[50,50],[200,50],[50,200]])pts2 = np.float32([[10,50],[200,50],[100,250]])M = cv2.getAffineTransform(pts1,pts2)print(M)#180/3.14theta=-0.4#M = np.float32([[np.cos(theta),-np.sin(theta),0],[np.sin(theta),np.cos(theta),0]])#M = np.float32([[0.1,1,0],[0,0.1,0]])# 变换矩阵,平移,斜切,旋转# affinecols=800rows=800dst = cv2.warpAffine(img,M,(cols*2,rows*3))plt.imshow(dst)pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])pts2 = np.float32([[0,0],[100,-20],[0,30],[300,300]])M = cv2.getPerspectiveTransform(pts1,pts2)print(M)# 拉伸变换后者透视变换dst = cv2.warpPerspective(img,M,(300,300))plt.imshow(dst)
2.4 图像的模糊和锐化
img = cv2.imread("lena.jpg")img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)img_gb= cv2.GaussianBlur(img, (139, 139), 4, 0) # 高斯模糊plt.imshow(img_gb)# GaussianBlur(src,ksize,sigmaX [,dst [,sigmaY [,borderType]]]


前为高斯模糊图,后为原图。
img_cn=cv2.Canny(img,30,150)plt.imshow(img_cn)







