OpenCV 배우기 1

한준호·2021년 7월 14일
0

OpenCV 배워보기

목록 보기
1/5
post-thumbnail

1. 이미지 다루기

이미지 불러오기

import cv2
img_color =cv2.imread('IMG_5999.jpeg',cv2.IMREAD_COLOR )
cv2.namedWindow('show Image')
cv2.imshow('show Image', img_color)

cv2.waitKey(0)
cv2.destroyWindow( )

import
opencv를 사용하기 위해 cv2를 import 한다.


img_color =cv2.imread('IMG_5999.jpeg',cv2.IMREAD_COLOR )

cv2.imread('파일이름', flags )

imread 함수의 리턴값을 변수에 대입해서 변수를 이용해 이미지에 접근 할 수 있도록 한다.

flags

  • cv2.IMREAD_COLOR : 투명도 정보를 가진 알파 채널을 무시하고 이미지 파일을 컬러로 읽는다.
  • cv2.IMREAD_GRAYSCALE : 이미지 파일을 GRAYSCALE 이미지로 읽어온다.
  • cv2.IMREAD_UNCHANGED : 투명도 정보를 가진 알파 채널을 포함하여 이미지 파일을 컬러로 읽는다.

cv2.namedWindow('show Image')

cv2.namedWindow('윈도우이름'(,~))

윈도우에 컬러 이미지가 보이도록 한다. (두번째 인자는 트랙바를 붙이는 경우가 아니면 생략 가능.)


cv2.imshow('show Image', img_color)

cv2.imshow('윈도우 이름', 이미지 변수)

지정한 윈도우에 이미지를 보여준다. (nameWindow 함수 없이 imshow 함수만 호출해도 윈도우가 자동으로 생성된다.)


cv2.waitKey(0)
지정한 시간(단위 초)만큼 사용자의 키보드 입력 대기한다.
(0)-키보드 입력 무한 대기.
윈도우를 키보드 입력이 있을 때까지 띄워놓기 위해 사용한다.


cv2.destroyWindow( )
프로그램 종료전 윈도우를 위한 자원을 해제한다.


Grayscale 이미지로 변환

import cv2

img_color =cv2.imread('IMG_5999.jpeg',cv2.IMREAD_COLOR )

cv2.namedWindow('Show Image')
cv2.imshow('Show Image', img_color)

cv2.waitKey(0)

img_gray =cv2.cvtColor(img_color,cv2.COLOR_BGR2GRAY)

cv2.imshow('Show GrayScale Image',img_gray)
cv2.waitKey(0)

cv2.imwrite('savedimage.jpg',img_gray)

cv2.destroyAllWindows( )

img_gray =cv2.cvtColor(img_color,cv2.COLOR_BGR2GRAY)

cv2.cvtColor(변환할 이미지, 변환할 색공간 선택)

컬러 이미지를 Grayscale 이미지로 변환


cv2.imshow('Show GrayScale Image',img_gray)
cv2.imshow('show Image', img_color)와 cv2.imshow('Show GrayScale Image',img_gray)에서 첫번째 인자가 다르면 컬러이미지와 Grayscale 이미지를 같이(동시에) 볼 수 있다.


cv2.imwrite('savedimage.jpg',img_gray)

cv2.imwrite('저장할 파일이름',저장할 이미지 변수)

이미지 파일을 저장한다.


cv2.destroyAllWindows( )
cv2.destroyWindow( )와 같은 역할을 한다.



2. 동영상 다루기

카메라로부터 캡쳐 이미지 가져오기

import cv2

cap =cv2.VideoCapture(0)

ret,img_color =cap.read()

cv2.imshow("color",img_color)
cv2.waitKey(0)

cap.release()
cv2.destroyAllWindows()

cap =cv2.VideoCapture(0)
비디오 캡처 객체를 생성한다.카메라로부터 영상을 캐치하기 위해 사용한다.
두대의 카메라 사용하려면 cv2.VideoCapture(0)인 비디오 객체를 생성하고 cv2.VideoCapture(1)인 비디오 캡처 객체를 추가 생성.


ret,img_color =cap.read()
비디오 캡처 객체의 read 함수를 호출, 카메라로부터 이미지 한장을 가져온다.


cap.release()
비디오 캡처 자원 메모리 해제한다.


카메라로부터 영상 가져오기(캡쳐된 이미지를 동영상으로 변환하기)

import cv2

cap =cv2.VideoCapture(0)

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

    if ret == False:
        continue

    img_gray =cv2.cvtColor(img_color,cv2.COLOR_RGB2GRAY)

    cv2.imshow("Color", img_color)
    cv2.imshow("Gray", img_gray)

    if cv2.waitKey(1)&0xFF ==27:
        break

cap.release()
cv2.destroyAllWindows()

while(True):
카메라로부터 영상 가져오기: '카메라로부터 캡쳐 이미지 가져오기'를 반복한다.


if ret == False:
continue

캡쳐되지 않은 경우 다시 루프를 실행한다(초기의 캡쳐가 잘 안되는 카메라를 위해 필요한 문장).


if cv2.waitKey(1)&0xFF ==27:
break

esc키를 누르면 무한루프에서 빠져나온다.
waitKey(1): 1초대기후 실행


카메라 영상 저장하기

import cv2

cap =cv2.VideoCapture(0)

fourcc = cv2.VideoWriter_fourcc(*'XVID')
writer = cv2.VideoWriter('output.avi',fourcc,30.0,(640,480))

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

    if ret == False:
        continue

    img_gray =cv2.cvtColor(img_color,cv2.COLOR_RGB2GRAY)

    cv2.imshow("Color", img_color)
    cv2.imshow("Gray", img_gray)

    writer.write(img_color)

    if cv2.waitKey(1) & 0xFF == 27:
        break

cap.release()
writer.release()

cv2.destroyAllWindows()

fourcc = cv2.VideoWriter_fourcc(*'XVID')
동영상 저장시 사용되는 코덱이다('XVID' 사용할 코덱이름).


writer = cv2.VideoWriter('output.avi',fourcc,30.0,(640,480))

cv2.VideoWriter('저장될 동영상 파일 이름',동영상 저장시 사용되는 코덱,영상의 초당 프레임 수(보통 30.0-1초에 30장),(저장할 영상의 크기(캡쳐되는 이미지 크기와 일치)))


writer.write(img_color)
캡쳐되는 이미지를 반복적으로 저장하여 동영상을 만든다.


writer.release()
비디오 writer 자원 해제.

동영상 파일 재생하기

import cv2

cap =cv2.VideoCapture('output.avi')

fourcc = cv2.VideoWriter_fourcc(*'XVID')

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

    if ret == False:
        break

    img_gray =cv2.cvtColor(img_color,cv2.COLOR_RGB2GRAY)

    cv2.imshow("Color", img_color)
    cv2.imshow("Gray", img_gray)


    if cv2.waitKey(1) & 0xFF == 27:
        break

cap.release()

cv2.destroyAllWindows()

cap =cv2.VideoCapture('output.avi')

cv2.VideoCapture('재생할 동영상 이름')


if ret == False:
break

동영상을 끝까지 재생하면 무한로프 빠져나온다.


1개의 댓글

comment-user-thumbnail
2021년 7월 14일

👏

답글 달기