gpt4 book ai didi

python - opencv背景减法

转载 作者:太空宇宙 更新时间:2023-11-03 22:00:28 24 4
gpt4 key购买 nike

我正在使用背景减法,我正在使用 python 来执行此操作,但是当我使用代码时,它只是接缝为我提供相机所见内容的黑白画面。据我所知,如果镜头前没有任何东西移动,一切都应该变黑,但这是我得到的图像。

问题截图:

这是我正在使用的代码。

import numpy as np
import cv2
import time

cap = cv2.VideoCapture(0)

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
fgbg = cv2.BackgroundSubtractorMOG()

while(1):
ret, frame = cap.read()

fgmask = fgbg.apply(frame)
fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel)

cv2.imshow('frame',fgmask)
k = cv2.waitKey(30) & 0xff
if k == 27:
break

cap.release()
cv2.destroyAllWindows()

我做错了什么?

最佳答案

首先,您应该对灰度图像进行背景减除。基本上,您应该做的是首先保存一个帧作为引用,然后从后续帧中减去它。

您想预先应用某种模糊,然后进行膨胀操作以减少噪音。

这是您可以使用基本代数进行的最基本的背景减法运算。你需要的是一个减法和几个形态学操作。

import numpy as np
import cv2
import time

cap = cv2.VideoCapture(0)
ret, first = cap.read()

# Save the first image as reference
first_gray = cv2.cvtColor(first, cv2.COLOR_BGR2GRAY)
first_gray = cv2.GaussianBlur(first_gray, (21, 21), 0)

while True:
ret, frame = cap.read()

if not ret:
break

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (21, 21), 0)

# In each iteration, calculate absolute difference between current frame and reference frame
difference = cv2.absdiff(gray, first_gray)

# Apply thresholding to eliminate noise
thresh = cv2.threshold(difference, 25, 255, cv2.THRESH_BINARY)[1]
thresh = cv2.dilate(thresh, None, iterations=2)

cv2.imshow("thresh", thresh)
key = cv2.waitKey(1) & 0xFF

# if the `q` key is pressed, break from the lop
if key == ord("q"):
break

cap.release()
cv2.destroyAllWindows()

关于python - opencv背景减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34615331/

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