01. ์ถ๋ ฅ
01. ์ถ๋ ฅ ๊ด๋ จ
์นด๋ฉ๋ผ ์ถ๋ ฅ
OpenCV๋ฅผ ์ด์ฉํ๋ฉด ์นด๋ฉ๋ผ ์ถ๋ ฅ์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์นด๋ฉ๋ผ ์ถ๋ ฅ์ ์นด๋ฉ๋ผ๊ฐ ์คํธ๋ฆฌ๋ฐ ํํ๋ก ๋์ํ ์ ์์ ๋ ์ฌ์ฉํฉ๋๋ค.
์ฆ, ์ ์ฅ๋ ์ด๋ฏธ์ง๋ ๋์์ ํ์ผ์ด ์๋๋ผ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ฐ์์ค๊ณ ๋ถ์ํด์ผ ํ๋ ๊ฒฝ์ฐ ์นด๋ฉ๋ผ๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
์นด๋ฉ๋ผ๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ธฐ ๋๋ฌธ์ ์ฐ๊ฒฐ๋ ์นด๋ฉ๋ผ์ ์ฅ์น ๋ฒํธ๋ฅผ ํตํด ๋ฐ์์ค๋ฉฐ, ์ฌ์ฉ์ค์ธ ํ๋ซํผ์์ ์นด๋ฉ๋ผ์ ๋ํ ์ ๊ทผ ๊ถํ์ด ํ์ฉ๋์ด์ผ ํฉ๋๋ค.
์์
import cv2
capture = cv2.VideoCapture(0)
capture.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
while cv2.waitKey(33) < 0:
ret, frame = capture.read()
cv2.imshow("VideoFrame", frame)
capture.release()
cv2.destroyAllWindows()
์ด๋ฏธ์ง ์ถ๋ ฅ
OpenCV๋ ๋์คํฐ ๊ทธ๋ํฝ์ค ์ด๋ฏธ์ง ํ์ผ ํฌ๋งท์ ์ฝ๊ฒ ๋ถ๋ฌ์ฌ ์ ์๋ ๋ณ๋์ ํจ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด ํจ์๋ ๋ถ๋ฌ์จ ์์ถ ํด์ ๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ๊ฐ์ ๋ณต์กํ ์์ ์ ์ฒ๋ฆฌํ๋ฉฐ, ํ์ผ ์๊ทธ๋์ฒ(File Signature)๋ฅผ ์ฝ์ด ์ ์ ํ ์ฝ๋ฑ์ ๊ฒฐ์ ํฉ๋๋ค.
OpenCV์์ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ฌ ๋๋ ํ์ฅ์๋ฅผ ํ์ธํ๋ ๋ฐฉ์์ด ์๋ ํ์ผ ์๊ทธ๋์ฒ๋ฅผ ์ฝ์ด ํ์ผ์ ํฌ๋งท์ ๋ถ์ํฉ๋๋ค.
ํ์ผ ์๊ทธ๋์ฒ๋ ํ์ผ ๋งค์ง ๋๋ฒ(File Magic Number)๋ผ๊ณ ๋ ํ๋ฉฐ, ๊ฐ ํ์ผ ํ์๋ง๋ค ๋ช ๊ฐ์ ๋ฐ์ดํธ๊ฐ ์ง์ ๋์ด ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, PNG ํ์ฅ์์ ๊ฒฝ์ฐ 89 50 4E 47 โฆ ํํ๋ก ํ์ผ ํค๋์ ํฌํจ๋์ด ์์ต๋๋ค.
์ด๋ฏธ์ง ์ ๋ ฅ ํจ์๋ ์ด์์ฒด์ ์ ์ฝ๋ฑ์ ์ฌ์ฉํด ์ด์์ฒด์ ๋ณ๋ก ํฝ์ ๊ฐ์ด ๋ค๋ฅผ ์ ์์ต๋๋ค.
์์
import cv2
image = cv2.imread("Image/lunar.jpg", cv2.IMREAD_ANYCOLOR)
cv2.imshow("Moon", image)
cv2.waitKey()
cv2.destroyAllWindows()
image = cv2.imread(fileName, flags)
Flags
cv2.IMREAD_UNCHANGED
: ์๋ณธ ์ฌ์ฉcv2.IMREAD_GRAYSCALE
: 1 ์ฑ๋, ๊ทธ๋ ์ด์ค์ผ์ผ ์ ์ฉcv2.IMREAD_COLOR
: 3 ์ฑ๋, BGR ์ด๋ฏธ์ง ์ฌ์ฉcv2.IMREAD_ANYDEPTH
: ์ด๋ฏธ์ง์ ๋ฐ๋ผ ์ ๋ฐ๋๋ฅผ 16/32๋นํธ ๋๋ 8๋นํธ๋ก ์ฌ์ฉcv2.IMREAD_ANYCOLOR
: ๊ฐ๋ฅํ 3 ์ฑ๋, ์์ ์ด๋ฏธ์ง๋ก ์ฌ์ฉcv2.IMREAD_REDUCED_GRAYSCALE_2
: 1 ์ฑ๋, 1/2 ํฌ๊ธฐ, ๊ทธ๋ ์ด์ค์ผ์ผ ์ ์ฉcv2.IMREAD_REDUCED_GRAYSCALE_4
: 1 ์ฑ๋, 1/4 ํฌ๊ธฐ, ๊ทธ๋ ์ด์ค์ผ์ผ ์ ์ฉcv2.IMREAD_REDUCED_GRAYSCALE_8
: 1 ์ฑ๋, 1/8 ํฌ๊ธฐ, ๊ทธ๋ ์ด์ค์ผ์ผ ์ ์ฉcv2.IMREAD_REDUCED_COLOR_2
: 3 ์ฑ๋, 1/2 ํฌ๊ธฐ, BGR ์ด๋ฏธ์ง ์ฌ์ฉcv2.IMREAD_REDUCED_COLOR_4
: 3 ์ฑ๋, 1/4 ํฌ๊ธฐ, BGR ์ด๋ฏธ์ง ์ฌ์ฉcv2.IMREAD_REDUCED_COLOR_8
: 3 ์ฑ๋, 1/8 ํฌ๊ธฐ, BGR ์ด๋ฏธ์ง ์ฌ์ฉ
๋น๋์ค ์ถ๋ ฅ
๋์์ ํ์ผ์์ ์์ฐจ์ ์ผ๋ก ํ๋ ์์ ์ฝ์ด ์ด๋ฏธ์ง์ ํํ๋ก ์ถ๋ ฅํฉ๋๋ค.
๋์์ ํ์ผ์ ์ฝ์ผ๋ ค๋ฉด ์ปดํจํฐ์ ๋์์ ์ฝ๋ฑ์ ์ฝ์ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์น๋ผ ์์ด์ผ ํฉ๋๋ค.
OpenCV๋ FFmpeg๋ฅผ ์ง์ํ๋ฏ๋ก *.avi
๋ *.mp4
๋ฑ ๋ค์ํ ํ์์ ๋์์ ํ์ผ์ ์์ฝ๊ฒ ์ฝ์ ์ ์์ต๋๋ค.
์ด๋ฏธ์ง ํ์ผ ์ค, GIF ํ์ฅ์๋ ํ๋ ์์ด ์กด์ฌํ๋ฏ๋ก, ๋์์ ํ์ผ์ ์ฝ๋ ๋ฐฉ๋ฒ๊ณผ ๋์ผํ๊ฒ ์ฒ๋ฆฌํฉ๋๋ค
์์
import cv2
capture = cv2.VideoCapture("kara.mp4")
while cv2.waitKey(33) < 0:
if capture.get(cv2.CAP_PROP_POS_FRAMES) == capture.get(cv2.CAP_PROP_FRAME_COUNT):
capture.set(cv2.CAP_PROP_POS_FRAMES, 0)
ret, frame = capture.read()
cv2.imshow("VideoFrame", frame)
capture.release()
cv2.destroyAllWindows()
VideoCapture
๋ฉ์๋
๋ฉ์๋ | ์๋ฏธ |
---|---|
capture.isOpened() | ๋์์ ํ์ผ ์ด๊ธฐ ์ฑ๊ณต ์ฌ๋ถ ํ์ธ |
capture.open(filename) | ๋์์ ํ์ผ ์ด๊ธฐ |
capture.set(propid, value) | ๋์์ ์์ฑ ์ค์ |
capture.get(propid) | ๋์์ ์์ฑ ๋ฐํ |
capture.release() | ๋์์ ํ์ผ์ ๋ซ๊ณ ๋ฉ๋ชจ๋ฆฌ ํด์ |
VideoCapture
์์ฑ
์์ฑ | ์๋ฏธ | ๋น๊ณ |
---|---|---|
cv2.CAP_PROP_FRAME_WIDTH | ํ๋ ์์ ๋๋น | - |
cv2.CAP_PROP_FRAME_HEIGHT | ํ๋ ์์ ๋์ด | - |
cv2.CAP_PROP_FRAME_COUNT | ์ด ํ๋ ์ ์ | - |
cv2.CAP_PROP_FPS | ํ๋ ์ ์๋ | - |
cv2.CAP_PROP_FOURCC | ์ฝ๋ฑ ์ฝ๋ | - |
cv2.CAP_PROP_BRIGHTNESS | ์ด๋ฏธ์ง ๋ฐ๊ธฐ | ์นด๋ฉ๋ผ๋ง ํด๋น |
cv2.CAP_PROP_CONTRAST | ์ด๋ฏธ์ง ๋๋น | ์นด๋ฉ๋ผ๋ง ํด๋น |
cv2.CAP_PROP_SATURATION | ์ด๋ฏธ์ง ์ฑ๋ | ์นด๋ฉ๋ผ๋ง ํด๋น |
cv2.CAP_PROP_HUE | ์ด๋ฏธ์ง ์์ | ์นด๋ฉ๋ผ๋ง ํด๋น |
cv2.CAP_PROP_GAIN | ์ด๋ฏธ์ง ๊ฒ์ธ | ์นด๋ฉ๋ผ๋ง ํด๋น |
cv2.CAP_PROP_EXPOSURE | ์ด๋ฏธ์ง ๋ ธ์ถ | ์นด๋ฉ๋ผ๋ง ํด๋น |
cv2.CAP_PROP_POS_MSEC | ํ๋ ์ ์ฌ์ ์๊ฐ | ms ๋ฐํ |
cv2.CAP_PROP_POS_FRAMES | ํ์ฌ ํ๋ ์ | ํ๋ ์์ ์ด ๊ฐ์ ๋ฏธ๋ง |
cv2.CAP_PROP_POS_AVI_RATIO | ๋น๋์ค ํ์ผ ์๋ ์์น | 0 = ์์, 1 = ๋ |