gpt4 book ai didi

python - OpenCV背景噪声扣除和运动检测中面临的问题

转载 作者:行者123 更新时间:2023-12-02 17:58:52 25 4
gpt4 key购买 nike

我正在一个需要检测人员的项目上,由于系统的复杂性,我决定使用移动检测。
我遇到了一些问题,在询问堆栈溢出时,this answer似乎是最好的。
因此,我通过以下步骤实现了该算法:

  • 在输入视频
  • 上实现显着性
  • 应用K均值聚类
  • 背景减法
  • 形态转换

  • 这是代码
    import cv2
    import time
    import numpy as np

    cap=cv2.VideoCapture(0)

    #i wanted to try different background subtractors to get the best result.
    fgbg=cv2.createBackgroundSubtractorMOG2()
    fgbg1 = cv2.bgsegm.createBackgroundSubtractorMOG()

    h = cap.get(4)
    w = cap.get(3)
    frameArea = h*w
    areaTH = frameArea/150


    while(cap.isOpened()):
    #time.sleep(0.05)

    _,frame=cap.read()
    cv2.imshow("frame",frame)
    image=frame

    ################Implementing Saliency########################
    saliency = cv2.saliency.StaticSaliencySpectralResidual_create()
    (success, saliencyMap) = saliency.computeSaliency(image)
    saliencyMap = (saliencyMap * 255).astype("uint8")
    #cv2.imshow("Image", image)
    #cv2.imshow("Output", saliencyMap)

    saliency = cv2.saliency.StaticSaliencyFineGrained_create()
    (success, saliencyMap) = saliency.computeSaliency(image)
    saliencyMap = (saliencyMap * 255).astype("uint8")

    threshMap = cv2.threshold(saliencyMap.astype("uint8"), 0, 255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
    # show the images
    #cv2.imshow("Image", image)
    #cv2.imshow("saliency", saliencyMap)
    #cv2.imshow("Thresh", threshMap)

    kouts=saliencyMap
    #cv2.imshow("kouts", kouts)
    ##############implementing k-means clustering#######################

    clusters=12
    z=kouts.reshape((-1,3))

    #covert to np.float32
    z=np.float32(z)

    #define criteria and accuracy
    criteria= (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER,5,1.0)

    #apply k-means
    ret,label,center=cv2.kmeans(z,clusters,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)

    #converting back the float 32 data to unit 8 and making the image
    center=np.uint8(center)
    res=center[label.flatten()]
    kouts=res.reshape((kouts.shape))


    cv2.imshow('clustered image',kouts)

    ############applying background subtraction#######################
    fgmask=fgbg.apply(kouts)
    fgmask1=fgbg1.apply(kouts)
    cv2.imshow('fg',fgmask)
    cv2.imshow('fgmask1',fgmask1)
    #as i said earlier, i wanted to get the best background subtractor

    #########################morphological transformation#####################
    #Below i tried various techniques to get the best possible result

    kernel=np.ones((5,5),np.uint8)

    erosion=cv2.erode(fgmask1,kernel,iterations=1)
    cv2.imshow('erosion',erosion)
    dilation=cv2.dilate(fgmask1,kernel,iterations=1)
    cv2.imshow('dilation',dilation)

    gradient = cv2.morphologyEx(fgmask1, cv2.MORPH_GRADIENT, kernel)
    cv2.imshow("gradient",gradient)

    opening=cv2.morphologyEx(fgmask1,cv2.MORPH_OPEN,kernel)
    closing=cv2.morphologyEx(fgmask1,cv2.MORPH_CLOSE,kernel)

    cv2.imshow('opening',opening)
    cv2.imshow('closing',closing)

    #########for detection of contours##################
    contours0, hierarchy = cv2.findContours(erosion,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
    for cnt in contours0:
    area = cv2.contourArea(cnt)
    if area > areaTH and area<frameArea*0.50:
    M = cv2.moments(cnt)
    x,y,f,g = cv2.boundingRect(cnt)
    img = cv2.rectangle(frame,(x,y),(x+f,y+g),(0,255,0),2)
    cv2.imshow('Original',frame)

    k = cv2.waitKey(1) & 0xff
    if k == ord('q'):
    break

    cap.release()
    cv2.destroyAllWindows()
    我在 video上尝试了该算法,但是输出中仍然有很多噪音。我以前认为问题可能出在视频质量上,但是当我执行cv2.VideoCapture(0)时,问题仍然存在,并且代码似乎并没有消除噪音和我正在处理的情况,有时噪音很大。
    告诉我任何建议,我哪里做错了或解决问题的其他方法。
    提前致谢。

    最佳答案

    我花了一段时间尝试看看是否可以通过降噪来解决问题,但是我相信您已经尝试了OpenCV中的许多已知技术。我的观点是使用神经网络来解决您的问题,因为它们将更准确地检测物体。
    我创建了一个Colab笔记本,以说明这一点:
    https://colab.research.google.com/drive/1rBrcu46sfo0F7fsQf4BC9hKoXTk_wNBk?usp=sharing
    即使采用这种简单的方法,也可以检测物体:人和衣服。您可以设置一个仅考虑前10个项目的条件。由于巴士入口处可同时进入的人数有限。
    这不是最终解决方案,因为我使用的是通用检测器。通过使用视频输入训练网络,可以改善您的应用程序。需要贴标签,但我相信这将为您提供最准确的结果。
    我还认为,要跟踪公交车内人员和进入的人员面临的挑战。为此,您可以跟踪矩形。有一个使用dlib的出色示例:https://www.pyimagesearch.com/2018/10/22/object-tracking-with-dlib/

    关于python - OpenCV背景噪声扣除和运动检测中面临的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64047784/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com