21xrx.com
2024-05-20 16:18:27 Monday
登录
文章检索 我的文章 写文章
使用OpenCV实现Yolov8目标检测
2023-08-04 22:37:03 深夜i     --     --
OpenCV Yolov8 目标检测 实现 图像处理

Yolov8是一种先进的目标检测算法,它在计算机视觉领域应用广泛。通过使用OpenCV库,我们可以很容易地实现Yolov8目标检测,从而实现对图像或视频中的物体进行准确的检测和定位。

首先,我们需要安装OpenCV库。在Python环境中执行`pip install opencv-python`命令即可完成安装。

接下来,我们需要下载Yolov8的模型文件。可以在GitHub上找到相应的模型文件,并将其下载到本地。

在完成安装和下载后,我们可以开始编写代码来实现Yolov8目标检测。

首先,导入必要的库:


import cv2

import numpy as np

然后,加载模型文件并进行初始化:


net = cv2.dnn.readNetFromDarknet('yolov8.cfg', 'yolov8.weights')

output_layers = net.getUnconnectedOutLayersNames()

接下来,我们可以读取图像或视频,并将其传递给Yolov8算法进行目标检测:


image = cv2.imread('image.jpg')

height, width, channels = image.shape

blob = cv2.dnn.blobFromImage(image, 1 / 255.0, (416, 416), swapRB=True, crop=False)

net.setInput(blob)

outs = net.forward(output_layers)

然后,我们可以解析算法的输出,提取检测到的目标的边界框和类别信息:


class_ids = []

confidences = []

boxes = []

for out in outs:

  for detection in out:

    scores = detection[5:]

    class_id = np.argmax(scores)

    confidence = scores[class_id]

    if confidence > 0.5:

      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)

font = cv2.FONT_HERSHEY_SIMPLEX

for i in range(len(boxes)):

  if i in indexes:

    x, y, w, h = boxes[i]

    label = str(class_ids[i])

    confidence = confidences[i]

    color = (0, 255, 0)

    cv2.rectangle(image, (x, y), (x + w, y + h), color, 2)

    cv2.putText(image, label, (x, y - 10), font, 0.5, color, 2)

cv2.imshow('Object Detection', image)

cv2.waitKey(0)

cv2.destroyAllWindows()

通过以上步骤,我们就可以使用OpenCV实现Yolov8目标检测。这个简单的实现可以帮助我们检测图像或视频中的物体,并将其标识出来。当然,还可以根据实际需求进行参数调整和功能扩展,以提高检测的准确性和效率。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复