荆为好 2024-06-25 13:38 采纳率: 100%
浏览 2
已结题

OpenCV检测人的python代码

使用OpenCV检测人脸,使用python的cv2库进行人的检测实现

  • 写回答

3条回答 默认 最新

  • 岫珩 全栈领域优质创作者 2024-06-25 13:39
    关注
    
    import cv2
    import numpy as np
    
    def is_inside(o,i):#如果o框在i框里面,那么就返回True,否则,返回False
        ox,oy,ow,oh = o
        ix,iy,iw,ih = i
        return ox > ix and oy > iy and ox + ow < ix + iw and oy + oh < iy + ih
    
    def draw_person(image,person):#给检测出来的人画框
        x,y,w,h = person
        cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,255),2)
        
    img = cv2.imread('E:\opencv3\charpter7\people1.jpg')
    
    #opencv自带的HOGDescriptor可以检测人,作为检测人的默认检测器
    hog = cv2.HOGDescriptor()#定义一个模型
    hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())#分类是基于人的分类
    
    found,w = hog.detectMultiScale(img)#这里用detectMultiScale来加载图像
    #print(found)#found是矩形框的信息,坐标和宽高
    #print(w)#w得到的是每一个矩形的置信度
    
    found_filtered = []
    for ri,r in enumerate(found):
    #    print('ri:',ri,'r:',r)
        for qi,q in enumerate(found):
    #        print('qi:',qi,'q:',q)
            if ri != qi and is_inside(r,q):#如果是索引不同的两个框,并且r框在q框里面完全包含了,就直接break
                print('过')#这里我们发现没有这种不同框相互包含的情况,三个框都不是相互包含的关系
                break
            else:
                found_filtered.append(r)
                
    for person in found_filtered:
    #    print(person)
        draw_person(img,person)
        
    cv2.imshow('PEOPLE DETECTION',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月3日
  • 已采纳回答 6月25日
  • 创建了问题 6月25日