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)

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的Python GUI目标检测系统程序的代码示例,使用了OpenCV和Tkinter库: ```python import cv2 import tkinter as tk from tkinter import filedialog class ObjectDetector: def __init__(self): self.image_path = '' self.classifier_path = 'cascade.xml' self.scale_factor = 1.1 self.min_neighbors = 5 self.min_size = (30, 30) self.window = tk.Tk() self.window.title('Object Detector') self.window.geometry('400x300') self.canvas = tk.Canvas(self.window, width=400, height=250) self.canvas.pack() self.btn_browse = tk.Button(self.window, text='Browse', command=self.browse_file) self.btn_browse.pack(pady=10) self.btn_detect = tk.Button(self.window, text='Detect', command=self.detect_objects) self.btn_detect.pack(pady=10) def browse_file(self): self.image_path = filedialog.askopenfilename(initialdir='/', title='Select Image File', filetypes=(('JPEG Files', '*.jpg'), ('PNG Files', '*.png'), ('All Files', '*.*'))) img = cv2.imread(self.image_path) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) height, width, channels = img.shape self.canvas.config(width=width, height=height) self.photo = tk.PhotoImage(width=width, height=height) self.photo.blank() self.photo = self.convert_img_to_photo(img) self.canvas.create_image(0, 0, anchor=tk.NW, image=self.photo) def detect_objects(self): if self.image_path == '': tk.messagebox.showerror('Error', 'Please select an image file.') return img = cv2.imread(self.image_path) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) classifier = cv2.CascadeClassifier(self.classifier_path) objects = classifier.detectMultiScale(gray, scaleFactor=self.scale_factor, minNeighbors=self.min_neighbors, minSize=self.min_size) for (x, y, w, h) in objects: cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) self.photo = self.convert_img_to_photo(img) self.canvas.create_image(0, 0, anchor=tk.NW, image=self.photo) def convert_img_to_photo(self, img): height, width, channels = img.shape photo = tk.PhotoImage(width=width, height=height) photo.blank() photo = self.put_img_into_photo(img, photo, height, width) return photo def put_img_into_photo(self, img, photo, height, width): for y in range(height): for x in range(width): r, g, b = img[y][x] color = '#{:02x}{:02x}{:02x}'.format(r, g, b) photo.put(color, (x, y)) return photo def run(self): self.window.mainloop() if __name__ == '__main__': detector = ObjectDetector() detector.run() ``` 该程序包括一个GUI窗口,允许用户通过文件选择对话框选择要检测的图像文件。然后使用OpenCV库中的CascadeClassifier类来检测图像中的对象,并将其绘制在图像中。最后,将绘制后的图像显示在GUI窗口中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一枚爱吃大蒜的程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值