Python_OpenCV基本功能实现

本文介绍了Python OpenCV的基本操作,包括cv.waitKey()的使用,调整图像尺寸与绘制形状,视频帧处理,人脸识别,计算轮廓面积,大矩形识别及棋盘格畸变校正。内容涵盖API详解、VideoCapture.get()的应用以及图像处理的各种实用技巧。
摘要由CSDN通过智能技术生成

API

cv.waitKey()

1、简介

  • 相当于cv.waitKey(0),即当前窗口持续显示,直至按下键盘或者点击窗口关闭。
  • 可将其赋予一个对象,如key = cv.waitKey(),若通过键盘关闭,则返回键盘的ASCII值(Esc对应的ASCII值为27);若通过鼠标点击窗口关闭按钮关闭,则返回-1。
  • 当前窗口持续显示a毫秒,同样可将其赋予一个对象,如key = cv.waitKey(a)。若在[0,a]毫秒之内通过键盘关闭了窗口,则返回键盘ASCII值,若是a毫秒之后窗口自动关闭,则返回-1。
  • 详解

2、使用

#等待 检测到按键为q就退出
while True:
    if ord('q')==cv.waitKey(0):
        break

VideoCapture.get()

VideoCapture.get()参数详解
在这里插入图片描述
使用时可用CaptureProperty.快速选择
在这里插入图片描述

显示图片

先imread在imshow

#导入cv模块
import cv2 as cv
#读取图片
img=cv.imread('liang.png')
#显示图片
cv.imshow('read-img',img)
#等待 为0就一直不关闭,其他就是到了设定的时间就会关闭
cv.waitKey(0)
#释放内存
cv.destroyWindow()

在这里插入图片描述

灰度转换

转化cvtColor,后保存imwrite

#导入cv模块
import cv2 as cv

#读取图片
img=cv.imread('qun.jpg')
#灰度转换
gray_img = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
#显示灰度转换后的图片
cv.imshow('gray',gray_img)#gray就是显示图片的图框的名字
#保存灰度图片
cv.imwrite('gray_face.jpg',gray_img)
#显示正常的图片
cv.imshow('read-img',img)
#等待 为0就一直不关闭,其他就是到了设定的时间就会关闭
cv.waitKey(0)
#释放内存
cv.destroyWindow()

在这里插入图片描述

修改尺寸并绘制矩形/圆形

1、修改尺寸:cv.resize(img,dsize=(300,300)) #这是等比例放大缩小,也就是可以完整的显示整张图片
2、绘制矩形:cv.rectangle(resize_img,(x,y,x+w,y+h),color=(255,0,0),thickness=1)起始点、宽、高
3、绘制圆形cv.circle(resize_img,center=(x+w,y+h),radius=50,color=(0,0,255),thickness=5)圆心 半径 颜色 宽度
4、打印图片尺寸大小:print(‘未修改:’,img.shape)

#导入cv模块
import cv2 as cv
#读取图片
img=cv.imread('dou.jpg')
#修改尺寸
resize_img=cv.resize(img,dsize=(300,300)) #这是等比例放大缩小,也就是可以完整的显示整张图片
#坐标  绘制矩形里面首先需要一个坐标  为他的起始点
x,y,w,h=0,0,50,50
#绘制矩形 起始点,宽,高,颜色,绘制线的宽度
cv.rectangle(resize_img,(x,y,x+w,y+h),color=(255,0,0),thickness=1)
#绘制圆形 圆心 半径 颜色 宽度
cv.circle(resize_img,center=(x+w,y+h),radius=50,color=(0,0,255),thickness=5)
#显示修改后的图片
cv.imshow('The modified picture',resize_img)
#打印尺寸大小 后面的3是rgb通道数
print('未修改:',img.shape)
print('修改后:',resize_img.shape)
#等待 检测到按键为q就退出
while True:
    if ord('q')==cv.waitKey(0)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您提供一个基于 PythonOpenCV 的人脸录入和识别系统。以下是基本的步骤: 1. 安装 OpenCV 库和其他依赖库,例如 numpy 和 argparse。 2. 准备训练数据集。这里我们可以使用已经标记好的数据集,例如 LFW 数据集,或者自己标记一些人脸数据集。 3. 训练人脸识别模型。我们可以使用 OpenCV 自带的人脸识别算法 LBPH(Local Binary Patterns Histograms)或者使用其他深度学习算法,例如基于卷积神经网络(CNN)的人脸识别模型。 4. 实现人脸录入功能。这里我们可以使用 OpenCV 的人脸检测算法来检测人脸,并使用摄像头拍摄人脸图像,然后将图像保存到本地。 5. 实现人脸识别功能。我们可以使用 OpenCV 的人脸识别算法来识别人脸,并将人脸与已知的人脸数据进行比对,从而确定识别结果。 下面是一些代码参考: ```python import cv2 import numpy as np import argparse # 训练模型 def train_model(training_data): # 加载数据 faces = [] labels = [] for label, folder in enumerate(training_data): for image_path in folder.glob("*.jpg"): image = cv2.imread(str(image_path), cv2.IMREAD_GRAYSCALE) faces.append(image) labels.append(label) # 训练模型 face_recognizer = cv2.face.LBPHFaceRecognizer_create() face_recognizer.train(faces, np.array(labels)) return face_recognizer # 检测人脸 def detect_face(image, face_cascade): gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30)) if len(faces) == 0: return None, None (x, y, w, h) = faces[0] return gray[y:y+w, x:x+h], faces[0] # 识别人脸 def recognize_face(image, face_recognizer, face_cascade): face, rect = detect_face(image, face_cascade) if face is None: return None label, confidence = face_recognizer.predict(face) return label, confidence # 录入人脸 def add_face(image, face_cascade, output_folder, label): face, rect = detect_face(image, face_cascade) if face is None: return False output_path = output_folder / f"{label}_{len(list(output_folder.glob('*.jpg'))) + 1}.jpg" cv2.imwrite(str(output_path), face) return True # 主函数 def main(): parser = argparse.ArgumentParser(description="Face Recognition System") parser.add_argument("--train", action="store_true", help="Train the face recognition model") parser.add_argument("--input", type=str, help="Input image or video path") parser.add_argument("--output", type=str, help="Output image or video path") parser.add_argument("--add", type=str, help="Add a new face to the dataset") parser.add_argument("--label", type=str, help="Label of the new face") args = parser.parse_args() if args.train: # 训练模型 training_data = [Path("data/face_recognition/person1"), Path("data/face_recognition/person2")] face_recognizer = train_model(training_data) face_recognizer.save("data/face_recognition/model.xml") elif args.add: # 录入新人脸 image = cv2.imread(args.add) face_cascade = cv2.CascadeClassifier("data/haarcascade_frontalface_default.xml") output_folder = Path("data/face_recognition/person3") add_face(image, face_cascade, output_folder, args.label) else: # 识别人脸 face_recognizer = cv2.face.LBPHFaceRecognizer_create() face_recognizer.read("data/face_recognition/model.xml") face_cascade = cv2.CascadeClassifier("data/haarcascade_frontalface_default.xml") if args.input: # 处理图片 image = cv2.imread(args.input) label, confidence = recognize_face(image, face_recognizer, face_cascade) print(f"Recognized label: {label}, confidence: {confidence}") if args.output: cv2.imwrite(args.output, image) else: # 处理视频 cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() label, confidence = recognize_face(frame, face_recognizer, face_cascade) print(f"Recognized label: {label}, confidence: {confidence}") if args.output: cv2.imwrite(args.output, frame) cv2.imshow("Face Recognition", frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() if __name__ == "__main__": main() ``` 您可以根据需要调整代码并添加更多功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

成草

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

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

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

打赏作者

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

抵扣说明:

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

余额充值