Python__模块(工具-人脸识别)__cv2

本文介绍了OpenCV库在计算机视觉中的广泛应用,包括人脸检测、对象识别、视频分析、图像调整(如尺寸调整、裁剪和添加文字)、灰度转换以及几何绘制。展示了如何使用OpenCV进行基本操作和示例代码.
摘要由CSDN通过智能技术生成

简介

OpenCV是计算机视觉中最受欢迎的库。

OpenCV是2500多种优化算法的组合。

OpenCV可用于检测和识别不同的人脸,实时识别图像中的对象。


了解

使用视频和网络摄像头对不同的人类动作进行分类,跟踪摄像机的运动,跟踪运动对象(例如汽车,人等),实时计数对象,缝合图像来产生高分辨率图像,从图像数据库中查找相似的图像。

从使用闪光灯拍摄的图像中消除红眼并提高图像质量,跟踪眼睛的运动,跟踪脸部等。


参考代码

显示窗口

import cv2 as cv

img = cv.imread("./2.png")    # 读取图片的路径必须英文
cv.imshow("read image", img)  # 窗口的名称,传参
cv.waitKey(0)                 # 等待键盘的输入 单位是毫秒 传入0 无限等待(不加此条语句 窗口会一闪而过)
cv.destroyAllWindows()        # C++语言 使用完内存必须释放

图片调整(调整图片尺寸)

import cv2 as cv

img = cv.imread("./1.jpeg")  # 读取图片
cv.imshow("img", img)
print("原图:", img.shape)
# 修改图片的尺寸
# resize_img=cv.resize(img,dsize=(110,160))
resize_img = cv.resize(img, dsize=(300, 420))  # 调整图片尺寸(像素单位)
print("修改后:", resize_img.shape)              # 参数:像素单位
cv.imshow("resize_img", resize_img)
cv.waitKey(0)
cv.destroyAllWindows()
cv.imwrite("./resize.jpg", resize_img)

图片调整(裁剪图片)

import cv2

img = cv2.imread("./1.jpeg")
# imgCropped = img[y1:y2, x1:x2]
imgCropped = img[100:1000, 0:500]
cv2.imshow("Image cropped", imgCropped)
cv2.imshow("Image", img)
cv2.waitKey(0)

图片调整(图片上写内容)

"""
cv2.putText(img,text,(x,y),FONT,FONT_SCALE,(R,G,B),THICKNESS)
它以图像,文本,x,y,颜色,字体,字体比例,粗细为输入。
"""
import cv2

img = cv2.imread("./1.jpeg")
cv2.putText(img, "HELLO", (120, 250), cv2.FONT_HERSHEY_COMPLEX, 2, (0, 0, 0), 3)
cv2.imshow("Image cropped", img)
cv2.waitKey(0)

图片样式(灰度转换)

# 图片进行灰度转换(适合绘图样本)
import cv2 as cv

src = cv.imread("./1.jpeg")
cv.imshow("input image", src)
# cv2读取图片的通道是BGR(蓝绿红)
# PIL读取图片的通道是RGB
gray_img = cv.cvtColor(src, code=cv.COLOR_BGR2GRAY)  # 将图片灰度转换
cv.imshow("gray_image", gray_img)
cv.waitKey(0)
cv.destroyAllWindows()
cv.imwrite("gray_2.png", gray_img)  # 保存图片

图片样式(在图片上画几何)

# 在图片上画几何(用于标记)
import cv2 as cv

img = cv.imread("./1.jpeg")
# 画矩形
# 左上角的坐标是(x,y) 矩形的宽度和高度(w,h)
# center元组:圆点的坐标,radius:半径
x, y, w, h = 100, 100, 100, 100
cv.rectangle(
    img, (x, y, x + w, y + h), color=(0, 255, 0), thickness=2
)  # color=BGR thickness线条宽度
cv.circle(
    img,
    center=(x + w // 2, y + h // 2),
    radius=w // 2,
    color=(0, 0, 255),
    thickness=2,
)
cv.imshow("result image", img)
cv.waitKey(0)
cv.destroyAllWindows()

人脸识别(图片中的人像)

import cv2 as cv

def fc(img):
    # 将图片转换为灰度图片
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    # 加载特征数据
    face_detector = cv.CascadeClassifier(
        "E:/tools/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml"
    )  # 人脸识别安装包的路径
    faces = face_detector.detectMultiScale(gray)
    # 对人脸进行圈图
    for x, y, w, h in faces:
        cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 255, 0), thickness=2)

# 加载图片
img = cv.imread("./test1.jpeg")
fc(img)  # 人脸识别函数
# 显示图片
cv.imshow("result", img)
cv.waitKey(0)
cv.destroyAllWindows()
# cv.imwrite('./new.jpg',img)

人脸识别(图片中的某个部位)

import cv2 as cv

def fc(img):
    # 将图片转换为灰度图片
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    # 自定义算法
    arr = [180, 400, 300, 530]
    # 对某个部位进行圈图
    cv.rectangle(
        img, (arr[0], arr[1]), (arr[2], arr[3]), color=(0, 255, 0), thickness=2
    )
    arr = [310, 400, 400, 500]
    # 对某个部位进行圈图
    cv.rectangle(
        img, (arr[0], arr[1]), (arr[2], arr[3]), color=(0, 255, 0), thickness=2
    )

# 加载图片
img = cv.imread("./cv2-test.jpg")
fc(img)  # 人脸识别函数
# 显示图片
cv.imshow("result", img)
cv.waitKey(0)
cv.destroyAllWindows()
# cv.imwrite('./new.jpg',img)

 人脸识别(视频中的某个区域)

import cv2 as cv

def face_detect_demo(img):
    # 将图片灰度
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    # 加载特征数据
    face_detector = cv.CascadeClassifier(
        "E:/tools/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml"
    )
    faces = face_detector.detectMultiScale(gray)
    for x, y, w, h in faces:
        cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)
    cv.imshow("result", img)
    
# 读取视频
cap = cv.VideoCapture("./video.mp4")
while True:
    flag, frame = cap.read()
    print("flag:", flag, "frame.shape:", frame.shape)
    if not flag:
        break
    face_detect_demo(frame)
    if ord("q") == cv.waitKey(10):
        break
cv.destroyAllWindows()
cap.release()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vip飞梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值