๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[v0.32]์์์ฒ๋ฆฌ_๋ฐฐ๊ฒฝ ์ ๊ฑฐ ๋ณธ๋ฌธ
[v0.32]์์์ฒ๋ฆฌ_๋ฐฐ๊ฒฝ ์ ๊ฑฐ
์ง์ง์ํ์นด 2022. 1. 18. 00:13220118 ์์ฑ
<๋ณธ ๋ธ๋ก๊ทธ๋ ๊ทํ์ด ์์ฌ๋์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ ๊ณต๋ถํ๋ฉฐ ์์ฑํ์์ต๋๋ค>
1. ๊ฐ์ฒด ์ถ์ (Object Tracking)
: ๋์์์์ ์ง์์ ์ผ๋ก ์์ง์ด๋ ๊ฐ์ฒด๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๊ฐ์ฒด ์ถ์
2. ๋ฐฐ๊ฒฝ ์ ๊ฑฐ(Background Subtraction)
: ๊ฐ์ฒด ์ถ์ ์ ์ํด ๊ฐ์ฒด๊ฐ ๋ฌด์์ธ์ง, ์ด๋ ์๋์ง๋ถํฐ ๋ช ํํ ํ์
: ๊ฐ์ฒด๋ฅผ ๋ช ํํ ํ์ ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก ๋ฐฐ๊ฒฝ ์ ๊ฑฐ
: ๋ฐฐ๊ฒฝ ์ ๊ฑฐ๋ ๊ฐ์ฒด๋ฅผ ํฌํจํ๋ ์์์์ ๊ฐ์ฒด๊ฐ ์๋ ๋ฐฐ๊ฒฝ ์์์ ๋นผ๋ ๋ฐฉ๋ฒ
: ์ฆ, ๋ฐฐ๊ฒฝ์ ๋ชจ๋ ์ ๊ฑฐํด ๊ฐ์ฒด๋ง ๋จ๊ธฐ๋ ๋ฐฉ๋ฒ
3. ๋ฐฐ๊ฒฝ ์ ๊ฑฐ ํจ์
cv2.bgsegm.createBackgroundSubtractorMOG(history, nmixtures, backgroundRatio, noiseSigma)
: ๋ฐฐ๊ฒฝ ์ ๊ฑฐ๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด ์์ฑ
: apply() ํจ์ ํธ์ถ๋ง์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์
- history=200 : ํ์คํ ๋ฆฌ ๊ธธ์ด
- nmixtures=5 : ๊ฐ์ฐ์์ ๋ฏน์ค์ฒ์ ๊ฐ์
- backgroundRatio=0.7 : ๋ฐฐ๊ฒฝ ๋น์จ
- noiseSigma=0 : ๋
ธ์ด์ฆ ๊ฐ๋ (0=์๋)
foregroundmask = backgroundsubtractor.apply(img, foregroundmask, learningRate)
: ๋ฐฐ๊ฒฝ ์ ๊ฑฐ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค ํจ์
- img : ์
๋ ฅ ์์
- foregroundmask : ์ ๊ฒฝ ๋ง์คํฌ
- learningRate=-1 : ๋ฐฐ๊ฒฝ ํ๋ จ ์๋(0~1, -1: ์๋)
backgroundImage = backgroundsubtractor.getBackgroundImage(backgroundImage)
: ๋ฐฐ๊ฒฝ ์ ๊ฑฐ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค ํจ์
- backgroundImage : ํ๋ จ์ฉ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง
+) ๋ ๋ค๋ฅธ ๋ฐฐ๊ฒฝ ์ ๊ฑฐ ๊ฐ์ฒด ์์ฑ ํจ์
cv2.createBackgroundSubtractorMOG2(history, varThreshold, detectShadows)
: ์์์ ๊ฐ ํฝ์ ์์ ์ ์ ํ ๊ฐ์ฐ์์ ๋ถํฌ ๊ฐ์ ์ ํ
: ๋น์ ๋ณํ๊ฐ ์ฌํ ์์์ ์ ์ฉํ๊ธฐ ์ข์
: ๊ทธ๋ฆผ์๋ฅผ ํ์งํ ์ง ๋ง์ง ์ ํํ ์ ์์
: detectShadows=True๋ก ์ค์ ํ๋ฉด ๊ทธ๋ฆผ์๋ฅผ ํ์ํ๊ณ False๋ก ์ค์ ํ๋ฉด ๊ทธ๋ฆผ์๋ฅผ ํ์ํ์ง ์์
: ๊ทธ๋ฆผ์๋ ํ์์ผ๋ก ํ์ํ๊ณ , ๊ทธ๋ฆผ์๋ฅผ ํ์ํ๋ฉด ์๋๊ฐ ๋ค์ ๋๋ ค์ง
- history=500 : ํ์คํ ๋ฆฌ ๊ฐ์
- varThreshold=16 : ๋ถ์ฐ ์๊ณ ๊ฐ
- detectShadows=True : ๊ทธ๋ฆผ์ ํ์
# BackgroundSubtractorMOG2 ๋ฐฐ๊ฒฝ ์ ๊ฑฐ
import numpy as np, cv2
cap = cv2.VideoCapture('img/walking.mp4')
fps = cap.get(cv2.CAP_PROP_FPS) # ํ๋ ์ ์ ๊ตฌํ๊ธฐ
delay = int(1000/fps)
# ๋ฐฐ๊ฒฝ ์ ๊ฑฐ ๊ฐ์ฒด ์์ฑ --- โ
fgbg = cv2.createBackgroundSubtractorMOG2()
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# ๋ฐฐ๊ฒฝ ์ ๊ฑฐ ๋ง์คํฌ ๊ณ์ฐ --- โก
fgmask = fgbg.apply(frame)
cv2.imshow('frame',frame)
cv2.imshow('bgsub',fgmask)
if cv2.waitKey(delay) & 0xff == 27:
break
cap.release()
cv2.destroyAllWindows()
- ์ค,, ๊ทธ๋ฆผ์๊ฐ ๋ ๋ง์ด ๋ณด์
- ๋ฐ๋ฅ ํ์ผ๋ ๋ณด์
์์ ์ฒจ ๋ค๋ค๋ดค๋๋ฐ
์ ๊ธฐํ๋น
'๐ฉโ๐ป IoT (Embedded) > Image Processing' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[v0.34]์์์ฒ๋ฆฌ_๊ฐ์ฒด ์ถ์ ์ ์ํ Tracking API (0) | 2022.01.18 |
---|---|
[v0.33]์์์ฒ๋ฆฌ_๊ดํ ํ๋ฆ(Optical Flow) (0) | 2022.01.18 |
[v0.31]์์์ฒ๋ฆฌ_์ฌ๋ฐ๋ฅธ ๋งค์นญ์ ์ฐพ๊ธฐ (0) | 2022.01.17 |
[v0.30]์์์ฒ๋ฆฌ_ํน์ง ๋งค์นญ(Feature Matching) (0) | 2022.01.16 |
[v0.29]์์์ฒ๋ฆฌ_ํน์ง ๋์คํฌ๋ฆฝํฐ ๊ฒ์ถ๊ธฐ (0) | 2022.01.15 |