opencv目标检测教程代码

import numpy as np
import cv2
import os
import sys
import argparse

# LOADING THE IMAGE
parser = argparse.ArgumentParser(description='face detection')
parser.add_argument('-name', '-n', type=str, default='Dartboard/dart2.jpg')
args = parser.parse_args()

cascade_name = "Dartboardcascade/cascade.xml"

def detectAndDisplay(frame):
    frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    frame_gray = cv2.equalizeHist(frame_gray)
    
    model = cv2.CascadeClassifier(cascade_name)
    if not model.load(cascade_name):
        print('--(!)Error loading cascade model')
        exit(0)
    
    faces = model.detectMultiScale(frame_gray, scaleFactor=1.1, minNeighbors=1, flags=0, minSize=(10,10), maxSize=(300,300))
    print(len(faces))

    for i in range(0, len(faces)):
        start_point = (faces[i][0], faces[i][1])
        end_point = (faces[i][0] + faces[i][2], faces[i][1] + faces[i][3])
        colour = (0, 255, 0)
        thickness = 2
        frame = cv2.rectangle(frame, start_point, end_point, colour, thickness)
    
    return faces

def save_detections_to_file(faces):
    with open('detections.txt', 'a') as f:  # 使用追加模式打开文件
        for face in faces:
            line = f"{args.name}, {face[0]}, {face[1]}, {face[2]}, {face[3]}\n"
            f.write(line)

imageName = args.name

if (not os.path.isfile(imageName)) or (not os.path.isfile(cascade_name)):
    print('No such file')
    sys.exit(1)

frame = cv2.imread(imageName, 1)

if not (type(frame) is np.ndarray):
    print('Not image data')
    sys.exit(1)

detected_faces = detectAndDisplay(frame)
cv2.imwrite("detected.jpg", frame)
save_detections_to_file(detected_faces)

猜你喜欢

转载自blog.csdn.net/qq_38735017/article/details/134687117