2025年使用python-opencv检测图片中的人像

使用python-opencv检测图片中的人像最简单的方法进行图片中的人像检测 使用 python opencv 配合 yolov3 模型进行图片中的人像检测 1 安装 python opencv numpy pip install opencv python pip install numpy 2 下载 yolo 模型文件和配置文件 下载地址 https download csdn

大家好,我是讯享网,很高兴认识大家。

最简单的方法进行图片中的人像检测

使用python-opencv配合yolov3模型进行图片中的人像检测

1、安装python-opencv、numpy

pip install opencv-python pip install numpy 

讯享网

2、下载yolo模型文件和配置文件:

下载地址:

 https://download.csdn.net/download/mldxs/yicon-default.png?t=N7T8
讯享网https://download.csdn.net/download/mldxs/

yolo官网:

YOLO: Real-Time Object DetectionYou only look once (YOLO) is a state-of-the-art, real-time object detection system.icon-default.png?t=N7T8https://pjreddie.com/darknet/yolo/3、搬砖:代码比较简单并且带注释,不过多介绍

讯享网import cv2 import numpy as np # 读取输入图像 image = cv2.imread('input.jpeg') # 加载YOLOv3模型和类别标签 net = cv2.dnn.readNet('yolov3.weights', 'yolov3.cfg') classes = [] with open('coco.data', 'r') as f: classes = f.read().strip().split('\n') # 获取YOLO模型的输出层名称 layer_names = net.getLayerNames() output_layers = [] unconnected_layers = net.getUnconnectedOutLayers() # 根据输出层索引获取输出层名称 for i in unconnected_layers: output_layers.append(layer_names[i - 1]) # 为每个类别生成随机颜色 colors = np.random.uniform(0, 255, size=(len(classes), 3)) # 获取图像的尺寸 height, width, channels = image.shape # 创建YOLO模型的输入blob blob = cv2.dnn.blobFromImage(image, 0.00392, (416, 416), (0, 0, 0), True, crop=False) # 将blob设置为模型的输入 net.setInput(blob) outs = net.forward(output_layers) class_ids = [] confidences = [] boxes = [] # 处理YOLO模型的输出 for out in outs: for detection in out: scores = detection[5:] class_id = np.argmax(scores) confidence = scores[class_id] # 如果置信度大于0.5并且类别是"person"(0对应COCO数据集中的"person"类) if confidence > 0.5 and class_id == 0: center_x = int(detection[0] * width) center_y = int(detection[1] * height) w = int(detection[2] * width) h = int(detection[3] * height) x = int(center_x - w / 2) y = int(center_y - h / 2) boxes.append([x, y, w, h]) confidences.append(float(confidence)) class_ids.append(class_id) # 使用非极大值抑制获取最终的检测结果 indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4) margin = 30 # 定义边框扩展的边距大小 # 绘制边框和类别标签 for i in range(len(boxes)): if i in indexes: x, y, w, h = boxes[i] label = str(classes[class_ids[i]]) color = colors[i] # 扩展边框的坐标 x_new = max(0, x - margin) y_new = max(0, y - margin) w_new = min(image.shape[1], w + 2 * margin) h_new = min(image.shape[0], h + 2 * margin) # 绘制扩展后的边框 cv2.rectangle(image, (x_new, y_new), (x_new + w_new, y_new + h_new), color, 2) cv2.putText(image, label, (x_new, y_new - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2) # 显示带有边框的图像 cv2.imshow('Detected Bodies', image) cv2.waitKey(0) cv2.destroyAllWindows()

最终效果:

yolo有很多检测类别,上述代码只对人像进行检测,就是检测类别里的第一项(person)

小讯
上一篇 2025-02-19 20:32
下一篇 2025-01-28 10:27

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/34890.html