learn-yolo/07.目标模糊处理.py

39 lines
1.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import cv2
from ultralytics import YOLO
# 加载预训练的YOLOv8模型
model = YOLO('models/yolo11n.pt')
# 打印模型能够识别的所有物体类别名称
print(model.names)
# 初始化摄像头参数1表示使用默认的第二个摄像头如果只有一个摄像头通常使用0
cap = cv2.VideoCapture(1)
# 循环读取摄像头帧,直到摄像头关闭
while cap.isOpened():
# 读取一帧图像
ret, frame = cap.read()
# 如果没有成功读取帧,则跳出循环
if not ret:
break
# 使用YOLO模型对当前帧进行目标检测
results = model.predict(frame)
# 从检测结果中提取边界框坐标xyxy格式并转换为列表
# 注意:这里原代码有重复赋值的错误,已修正
boxes = results[0].boxes.xyxy.cpu().tolist()
# 遍历所有检测到的边界框
for box in boxes:
# 从frame中截取边界框区域的图像
# 格式为[y1:y2, x1:x2]其中box[0]是x1, box[1]是y1, box[2]是x2, box[3]是y2
obj = frame[int(box[1]):int(box[3]), int(box[0]):int(box[2])]
# 对截取的图像区域进行高斯模糊处理模糊核大小为70x70
# 然后将模糊后的图像重新赋值给原位置,实现目标模糊效果
frame[int(box[1]):int(box[3]), int(box[0]):int(box[2])] = cv2.blur(obj, (70, 70))
# 显示处理后的图像窗口
cv2.imshow("YOLOv8 Inference", frame)
# 等待键盘输入1毫秒如果按下'q'键则退出循环
if cv2.waitKey(1) == ord('q'):
break
# 释放摄像头资源
cap.release()
# 关闭所有OpenCV创建的窗口
cv2.destroyAllWindows()