Skip to main content

01. ์ถœ๋ ฅ

Less than 1 minutePythoncrashcoursepythonpyopencv

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 = ๋

์ด์ฐฌํฌ (MarkiiimarK)
Never Stop Learning.