demo01.py
import cv2
img = cv2.imread("peoples.png") # 读取人脸图像
# 加载识别人脸的级联分类器
faceCascade = cv2.CascadeClassifier("./cascades\\haarcascade_frontalface_default.xml")
faces = faceCascade.detectMultiScale(img, 1.3) # 识别出所有人脸
for (x, y, w, h) in faces: # 遍历所有人脸的区域
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 5) # 在图像中人脸的位置绘制方框
cv2.imshow("img", img) # 显示最终处理的效果
cv2.waitKey() # 按下任何键盘按键后
cv2.destroyAllWindows() # 释放所有窗体
demo02.py
import cv2
# 覆盖图像
def overlay_img(img, img_over, img_over_x, img_over_y):
"""
覆盖图像
:param img: 背景图像
:param img_over: 覆盖的图像
:param img_over_x: 覆盖图像在背景图像上的横坐标
:param img_over_y: 覆盖图像在背景图像上的纵坐标
:return: 两张图像合并之后的图像
"""
img_h, img_w, img_p = img.shape # 背景图像宽、高、通道数
img_over_h, img_over_w, img_over_c = img_over.shape # 覆盖图像高、宽、通道数
if img_over_c == 3: # 通道数小于等于3
img_over = cv2.cvtColor(img_over, cv2.COLOR_BGR2BGRA) # 转换成4通道图像
for w in range(0, img_over_w): # 遍历列
for h in range(0, img_over_h): # 遍历行
if img_over[h, w, 3] != 0: # 如果不是全透明的像素
for c in range(0, 3): # 遍历三个通道
x = img_over_x + w # 覆盖像素的横坐标
y = img_over_y + h # 覆盖像素的纵坐标
if x >= img_w or y >= img_h: # 如果坐标超出最大宽高
break # 不做操作
img[y, x, c] = img_over[h, w, c] # 覆盖像素
return img # 完成覆盖的图像
face_img = cv2.imread("peoples.png") # 读取人脸图像
glass_img = cv2.imread("glass.png", cv2.IMREAD_UNCHANGED) # 读取眼镜图像,保留图像类型
height, width, channel = glass_img.shape # 获取眼镜图像高、宽、通道数
# 加载级联分类器
face_cascade = cv2.CascadeClassifier("./cascades2/haarcascade_frontalface_default.xml")
garyframe = cv2.cvtColor(face_img, cv2.COLOR_BGR2GRAY) # 转为黑白图像
faces = face_cascade.detectMultiScale(garyframe, 1.3, 5) # 识别人脸
for (x, y, w, h) in faces: # 遍历所有人脸的区域
gw = w # 眼镜缩放之后的宽度
gh = int(height * w / width) # 眼镜缩放之后的高度度
glass_img = cv2.resize(glass_img, (gw, gh)) # 按照人脸大小缩放眼镜
overlay_img(face_img, glass_img, x, y + int(h * 1 / 3)) # 将眼镜绘制到人脸上
cv2.imshow("screen", face_img) # 显示最终处理的效果
cv2.waitKey() # 按下任何键盘按键后
cv2.destroyAllWindows() # 释放所有窗体
demo03.py
import cv2
img = cv2.imread("peoples.png") # 读取人脸图像
# 加载识别眼睛的级联分类器
eyeCascade = cv2.CascadeClassifier("./cascades3\\haarcascade_eye.xml")
eyes = eyeCascade.detectMultiScale(img, 1.15) # 识别出所有眼睛
for (x, y, w, h) in eyes: # 遍历所有眼睛的区域
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 4) # 在图像中眼睛的位置绘制方框
cv2.imshow("img", img) # 显示最终处理的效果
cv2.waitKey() # 按下任何键盘按键后
cv2.destroyAllWindows() # 释放所有窗体
demo04.py
import cv2
img = cv2.imread("cat.jpg") # 读取猫脸图像
# 加载识别猫脸的级联分类器
catFaceCascade = cv2.CascadeClassifier("cascades4\\haarcascade_frontalcatface_extended.xml")
catFace = catFaceCascade.detectMultiScale(img, 1.15, 4) # 识别出所有猫脸
for (x, y, w, h) in catFace: # 遍历所有猫脸的区域
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 5)# 在图像中猫脸的位置绘制方框
cv2.imshow("Where is your cat ?", img) # 显示最终处理的效果
cv2.waitKey() # 按下任何键盘按键后
cv2.destroyAllWindows() # 释放所有窗体
demo05.py
import cv2
img = cv2.imread("monitoring.jpg") # 读取图像
# 加载识别类人体的级联分类器
bodyCascade = cv2.CascadeClassifier("cascades5\\haarcascade_fullbody.xml")
bodys = bodyCascade.detectMultiScale(img, 1.15, 4) # 识别出所有人体
for (x, y, w, h) in bodys: # 遍历所有人体区域
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 5)# 在图像中人体的位置绘制方框
cv2.imshow("img", img) # 显示最终处理的效果
cv2.waitKey() # 按下任何键盘按键后
cv2.destroyAllWindows() # 释放所有窗体
demo06.py
import cv2
img = cv2.imread("car.jpg") # 读取车的图像
# 加载识别车牌的级联分类器
plateCascade = cv2.CascadeClassifier("cascades6\\haarcascade_russian_plate_number.xml")
plates = plateCascade.detectMultiScale(img, 1.15, 4) # 识别出所有车牌
for (x, y, w, h) in plates: # 遍历所有车牌区域
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 5) # 在图像中车牌的位置绘制方框
cv2.imshow("img", img) # 显示最终处理的效果
cv2.waitKey() # 按下任何键盘按键后
cv2.destroyAllWindows() # 释放所有窗体
zuoye.py
import cv2
import numpy as np
img1 = cv2.imread("peoples.png")
faceCascade = cv2.CascadeClassifier("./cascades\\haarcascade_frontalface_default.xml")
faces = faceCascade.detectMultiScale(img1, 1.3)
for (x, y, w, h) in faces: # 遍历所有人脸的区域
cv2.rectangle(img1, (x, y), (x + w, y + h), (0, 0, 255), 5) # 在图像中人脸的位置绘制方框
def overlay_img(img, img_over, img_over_x, img_over_y):
img_h, img_w, img_p = img.shape # 背景图像宽、高、通道数
img_over_h, img_over_w, img_over_c = img_over.shape # 覆盖图像高、宽、通道数
if img_over_c == 3:
img_over = cv2.cvtColor(img_over, cv2.COLOR_BGR2BGRA)
for w in range(0, img_over_w):
for h in range(0, img_over_h):
if img_over[h, w, 3] != 0:
for c in range(0, 3):
x = img_over_x + w
y = img_over_y + h
if x >= img_w or y >= img_h:
break
img[y, x, c] = img_over[h, w, c] # 覆盖像素
return img
img2 = cv2.imread("peoples.png")
glass_img = cv2.imread("glass.png", cv2.IMREAD_UNCHANGED)
height, width, channel = glass_img.shape
face_cascade = cv2.CascadeClassifier("./cascades2/haarcascade_frontalface_default.xml")
garyframe = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(garyframe, 1.3, 5)
for (x, y, w, h) in faces:
gw = w
gh = int(height * w / width)
glass_img = cv2.resize(glass_img, (gw, gh))
overlay_img(img2, glass_img, x, y + int(h * 1 / 3))
cv2.imshow("screen", img2) # 显示最终处理的效果
img3 = cv2.imread("peoples.png") # 读取人脸图像
# 加载识别眼睛的级联分类器
eyeCascade = cv2.CascadeClassifier("./cascades3\\haarcascade_eye.xml")
eyes = eyeCascade.detectMultiScale(img3, 1.15) # 识别出所有眼睛
for (x, y, w, h) in eyes: # 遍历所有眼睛的区域
cv2.rectangle(img3, (x, y), (x + w, y + h), (0, 0, 255), 4) # 在图像中眼睛的位置绘制方框
cv2.imshow("img", img3) # 显示最终处理的效果
img4 = cv2.imread("cat.jpg")
catFaceCascade = cv2.CascadeClassifier("cascades4\\haarcascade_frontalcatface_extended.xml")
catFace = catFaceCascade.detectMultiScale(img4, 1.15, 4)
for (x, y, w, h) in catFace:
cv2.rectangle(img4, (x, y), (x + w, y + h), (0, 0, 255), 5)
cv2.imshow("Where is your cat ?", img4)
import cv2
img5 = cv2.imread("monitoring.jpg") # 读取图像
# 加载识别类人体的级联分类器
bodyCascade = cv2.CascadeClassifier("cascades5\\haarcascade_fullbody.xml")
bodys = bodyCascade.detectMultiScale(img5, 1.15, 4) # 识别出所有人体
for (x, y, w, h) in bodys: # 遍历所有人体区域
cv2.rectangle(img5, (x, y), (x + w, y + h), (0, 0, 255), 5)# 在图像中人体的位置绘制方框
cv2.imshow("img", img5) # 显示最终处理的效果
img6 = cv2.imread("car.jpg")
plateCascade = cv2.CascadeClassifier("cascades6\\haarcascade_russian_plate_number.xml")
plates = plateCascade.detectMultiScale(img6, 1.15, 4) # 识别出所有车牌
for (x, y, w, h) in plates: # 遍历所有车牌区域
cv2.rectangle(img6, (x, y), (x + w, y + h), (0, 0, 255), 5) # 在图像中车牌的位置绘制方框
cv2.imshow("img", img6) # 显示最终处理的效果
a1 = cv2.resize(img1,(200,200))
a2 = cv2.resize(img2,(200,200))
a3 = cv2.resize(img3,(200,200))
a4 = cv2.resize(img4,(200,200))
a5 = cv2.resize(img5,(200,200))
a6 = cv2.resize(img6,(200,200))
#img_h = np.hstack((dst1,dst1)) #水平拼接
#img_v = np.vstack((dst2,dst2)) #竖直拼接
a1 = np.hstack((a1,a2,a3))
a2 = np.hstack((a4,a5,a6))
a = np.vstack((a1,a2))
cv2.imwrite("C:\\Users\\ASUS\\PycharmProjects\\pythonProject3\\Opencv\\15\\20040420.jpg", a)
cv2.imshow("20040420",a)
cv2.waitKey()
cv2.destroyAllWindows()
car.jpg
cat.jpg
glass.png
model.png
monitoring.jpg
peoples.png
另外还有六个cascades文件夹下的文件不便发出。