我是靠谱客的博主 清爽玫瑰,最近开发中收集的这篇文章主要介绍Python OpenCV:使用KNN背景分割器实现特征物体识别使用BackgroundSubtractor类中的KNN方法实现背景分割与特征物体检测,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

引用自OpenCV 3计算机视觉:Python语言实现 第二版

使用BackgroundSubtractor类中的KNN方法实现背景分割与特征物体检测

BackgroundSubtractor类的另一个基本特征是它可以计算阴影,对于精确度读取视频帧绝对是至关重要的;通过检测阴影,可排除检测图像的阴影区域(采用阈值方式),从而能关注实际特征。

本代码实现的功能是检测固定背景中,新出现的物体,可静可动。
测试环境为Python 3.7 + OpenCV
摄像头使用的是笔记本外接USB摄像头

import cv2  
import numpy as np  

bs = cv2.createBackgroundSubtractorKNN(detectShadows = True)
camera = cv2.VideoCapture(1)

while True:
    ret, frame = camera.read()
    fgmask = bs.apply(frame)
    th = cv2.threshold(fgmask.copy(), 244, 255, cv2.THRESH_BINARY)[1]
    dilated = cv2.dilate(th, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3)), iterations = 2)
    contours, hier = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    for c in contours:
        if cv2.contourArea(c) > 1600:
            (x,y,w,h) = cv2.boundingRect(c)
            cv2.rectangle(frame, (x,y), (x+w,y+h), (255,255,0), 2)

    cv2.imshow("mog",fgmask)
    cv2.imshow("thresh",th)
    cv2.imshow("detection",frame)
    if cv2.waitKey(30) & 0xff == 27:
        break

camera.release()
cv2.destroyAllWindows()

运行结果如下图所示:

此时没有物体进入或运动

此时有物体进入
在这里插入图片描述
测试发现检测效果良好,但是检测结果与摄像头的测光结果有很大关系。
如果新加入的物体使整体的测光结果有一定偏差的话,就会导致检测结果产生混乱。

最后

以上就是清爽玫瑰为你收集整理的Python OpenCV:使用KNN背景分割器实现特征物体识别使用BackgroundSubtractor类中的KNN方法实现背景分割与特征物体检测的全部内容,希望文章能够帮你解决Python OpenCV:使用KNN背景分割器实现特征物体识别使用BackgroundSubtractor类中的KNN方法实现背景分割与特征物体检测所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部