s t u d y . . ๐Ÿง/AI ์•ค ML ์•ค DL

[OpenCV] ์‹ค์‹œ๊ฐ„ ์˜์ƒ ์ฒ˜๋ฆฌ : ๊ธฐ๋ณธ ํ•จ์ˆ˜ ์ •๋ฆฌ

H J 2022. 9. 14. 16:11

๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด์˜ ์นด๋ฉ”๋ผ ์˜์ƒ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ธ๊ณต์ง€๋Šฅ ๋ชจ๋ธ์„ ๋Œ๋ ค์„œ ๊ฐ์ง€๋ฅผ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— OpenCV ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์•˜๋‹ค!

 

๐Ÿ’ก ์˜์ƒ์„ ์ธ๊ณต์ง€๋Šฅ ๋ชจ๋ธ์— ๋Œ๋ฆฌ๋Š” ๋ฒ•

  1. ์ด๋ฏธ์ง€ ์‚ฌ์šฉํ•œ ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ ์ƒ์„ฑ
  2. ๋™์˜์ƒ ํ”„๋ ˆ์ž„ → ์ด๋ฏธ์ง€ (opencv ์‚ฌ์šฉ)
  3. 2๋ฒˆ์˜ ์ด๋ฏธ์ง€๋ฅผ 1๋ฒˆ์˜ ๋ชจ๋ธ์— ๋„ฃ๊ธฐ → ํ™•๋ฅ 
  4. ํ™•๋ฅ  ํ‰๊ท  → ํŒ๋ณ„

OpenCV

  • cap = cv2.VideoCapture(path or ์นด๋ฉ”๋ผ์žฅ์น˜๋ฒˆํ˜ธ)
cap = cv2.VideoCapture("์˜์ƒ ๊ฒฝ๋กœ" or 0: ์นด๋ฉ”๋ผ์žฅ์น˜๋ฒˆํ˜ธ)

์ฒซ ํ”„๋ ˆ์ž„ ์ฝ์–ด cap ๊ฐ์ฒด์— ์ €์žฅ

  • cap.isOpen()
if cap.isOpened():

cap์ด ์ง€์ •ํ•œ ํ”„๋ ˆ์ž„์œผ๋กœ ์ œ๋Œ€๋กœ ์ดˆ๊ธฐํ™”๋˜์—ˆ๋Š”์ง€ ํ™•์ธ

  • cap.read()
ret, img = cap.read()  # ๋ฌดํ•œ๋ฐ˜๋ณต

์—ฐ์†์œผ๋กœ ํ”„๋ ˆ์ž„ ์ฝ๊ธฐ (์˜์ƒ ์ •๋ณด ์ฝ๊ธฐ)

ret : true or false / img : ํ”„๋ ˆ์ž„ ์ด๋ฏธ์ง€ or None

  • cap.get()
cap.get() # ์˜์ƒ์ •๋ณด ์ฝ์–ด์˜ค๊ธฐ

cv2.CAP_PROP_FRAME_WIDTH / HEIGHT / COUNT : width ์ •๋ณด / height ์ •๋ณด / ์˜์ƒ ์ด ํ”„๋ ˆ์ž„์ˆ˜

cv2.CAP_PROP_FPS : ์˜์ƒ fps ๊ฐ’

  • cv2.imshow(’file’, file)
cv2.imshow(video_file, img) # ์ฐฝ์˜ ์ œ๋ชฉ, ํ™”๋ฉด์— ํ‘œ์‹œํ•  ํ”„๋ ˆ์ž„ ์ด๋ฏธ์ง€ ๊ฐ์ฒด

์˜์ƒ ํŒŒ์ผ ์—ด๊ธฐ

  • cap.release()
cap.release() # ์ž์› ๋ฐ˜๋‚ฉ
  • cap.destroyAllWindows()
cv2.destroyAllWindows()

์—ด๋ฆฐ ์ฐฝ(์˜์ƒ, ์ด๋ฏธ์ง€) ๋‹ซ๊ธฐ

if cv2.waitKey(1) != -1:
	break               

์นด๋ฉ”๋ผ(์ €์žฅ๋˜์–ด ์žˆ๋Š” ์˜์ƒ x)๋Š” ๋์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ํ‚ค๊ฐ€ ๋ˆŒ๋ฆฌ๋ฉด ์ •์ง€๋˜๋„๋ก

 


  • OpenCV์ฐธ๊ณ  ์ฝ”๋“œ
    import cv2
    
    cap = cv2.VideoCapture("์˜์ƒ ๊ฒฝ๋กœ" or 0: ์นด๋ฉ”๋ผ์žฅ์น˜๋ฒˆํ˜ธ) # ์บก์ฒ˜ ๊ฐ์ฒด ์ƒ์„ฑ
    
    # ์˜์ƒ ํŒŒ์ผ ์ฝ๊ธฐ
    if cap.isOpened():                 # ์บก์ณ ๊ฐ์ฒด ์ดˆ๊ธฐํ™” ํ™•์ธ
        while True:
            ret, img = cap.read()      # ๋‹ค์Œ ํ”„๋ ˆ์ž„ ์ฝ๊ธฐ      --- โ‘ก
            if ret:                     # ํ”„๋ ˆ์ž„ ์ฝ๊ธฐ ์ •์ƒ
                cv2.imshow(video_file, img) # ํ™”๋ฉด์— ํ‘œ์‹œ  --- โ‘ข
                cv2.waitKey(25)            # 25ms ์ง€์—ฐ(40fps๋กœ ๊ฐ€์ •)   --- โ‘ฃ
            else:                       # ๋‹ค์Œ ํ”„๋ ˆ์ž„ ์ฝ์„ ์ˆ˜ ์—†์Šด,
                break                   # ์žฌ์ƒ ์™„๋ฃŒ
    else:
        print("can't open video.")      # ์บก์ณ ๊ฐ์ฒด ์ดˆ๊ธฐํ™” ์‹คํŒจ
    
    # ์นด๋ฉ”๋ผ ํ”„๋ ˆ์ž„ ์ฝ๊ธฐ
    if cap.isOpened():                      # ์บก์ณ ๊ฐ์ฒด ์—ฐ๊ฒฐ ํ™•์ธ
        while True:
            ret, img = cap.read()           # ๋‹ค์Œ ํ”„๋ ˆ์ž„ ์ฝ๊ธฐ
            if ret:
                cv2.imshow('camera', img)   # ๋‹ค์Œ ํ”„๋ ˆ์ž„ ์ด๋ฏธ์ง€ ํ‘œ์‹œ
                if cv2.waitKey(1) != -1:    # 1ms ๋™์•ˆ ํ‚ค ์ž…๋ ฅ ๋Œ€๊ธฐ ---โ‘ก
                    break                   # ์•„๋ฌด ํ‚ค๋ผ๋„ ์ž…๋ ฅ์ด ์žˆ์œผ๋ฉด ์ค‘์ง€
            else:
                print('no frame')
                break
    else:
        print("can't open camera.")
    
    cap.release()
    cv2.destroyAllWindows()
    

 

์ฐธ๊ณ ๋งํฌ