Python/파이썬 OpenCV 공부

[파이썬 OpenCV] OpenCV 주요 함수 설명

AI 꿈나무 2020. 9. 25. 01:14
반응형

OpenCV 주요 함수 설명

OpenCV 기본 명령어에 대해 알아보도록 하겠습니다.

 

1. 영상 파일 불러오기

cv2.imread 명령어를 이용하면 영상 파일을 불러올 수 있습니다.

 

cv2.imread(filename, flags=None) -> retval

 filename : 불러올 영상 파일 이름(문자열)

 flags : 영상 파일 불러오기 옵션 플래그

 retval : 반환값, 불러온 영상 데이터(numpy.ndarray)

 

# BGR 컬러 영상으로 읽기 (기본값), shape = (rows, cols, 3)
img = cv2.imread('cat.bmp', cv2.IMREAD_COLOR)

# 그레이스스케일 영상으로 읽기, shape = (rows, cols)
img = cv2.imread('cat.bmp', cv2.IMREAD_GRAYSCALE)

# 영상 파일 속성 그대로 읽기, ex) 투명한 PNG 파일 : shape = (rows, cols, 4)
img = cv2.imread('cat.bmp', cv2.IMREAD_UNCHANGED)

기본값으로 cv2.IMREAD_COLOR가 설정되어 있습니다.

 

 

2. 영상 파일 저장하기

cv2.imwrite 명령어를 이용하면 영상 파일을 저장할 수 있습니다.

 

cv2.imwrite(filename, img, params=None) -> retval

 filename : 저장할 영상 파일 이름(문자열)

 img : 저장할 영상 데이터(numpy.ndarray), 아까 불러온 영상의 저장 변수명

 params : 파일 저장 옵션 지정(속성 & 값의 정수 쌍), ex) cv2.IMWRITE_JPEG_QUALITY,90] : JPG 파일 압축률을 90%로 지정

 retval : 반환값, 정상적으로 저장하면 True, 실패하면 False

 

cv2.imwrite('cat_gray.png', img) # 불러온 img를 파일 저장

이처럼 파일이 저장된 것을 확인할 수 있습니다.

 

3. 새 창 띄우기

cv2.nameWindow 명령어를 이용하면 창을 띄울 수 있습니다.

 

cv2.nameWindow(winname, flags=None) -> None

 winname : 창 고유 이름(문자열)

 flags : 창 속성 지정 플래그, WINDOW_AUTOSIZE, WINDOW_NORMAL 두 가지를 설정할 수 있습니다.

 

# 기본값 cv2.WINDOW_AUTOSIZE, 창 크기를 영상 크기에 맞게 변경. 창의 크기 조정 불가
cv2.namedWindow('image')

# 영상 크기를 창 크기에 맞게 지정, 창 크기 조정 가능
cv2.namedWindow('image', cv2.WINDOW_NORMAL)

 

4. 창 닫기

cv2.destroyAllWindows

cv2.destroyWindow 명령어를 이용하여 창을 닫을 수 있습니다.

 

cv2.destroyAllWindows() -> None

 열려있는 모든 창을 닫습니다.

 

cv2.destroyWindow(winname) -> None

 지정한 창 하나만 닫습니다.

 winname : 닫고자 하는 창 이름

 

cv2.destroyAllWindows() # 모든 창을 닫음
cv2.destroyWindow('image') # 지정한 창 닫음

 

5. 창 위치 이동

cv2.moveWindow 명령어를 이용하여 창 위치를 이동할 수 있습니다.

 

cv.2moveWindow(winname, x, y) -> None

 winname : 창이름

 x, y : 이동할 위치 좌표

 

cv2.moveWindow('image', 50, 100)

 

6. 창 크기 변경

cv2.resizeWindow 명령어를 이용하여 창 크기를 변경할 수 있습니다.

 

cv2.resizeWindow(winname, width, height) -> None

 winname : 창이름

 width : 변경할 창의 가로 크기

 height : 변경할 창의 세로 크기

 

[참고사항]

 창 생성 시 cv2.WINDOW_NORMAL 속성으로 생성되어야 동작합니다.

 영상 출력 부분의 크기만을 고려합니다. (제목 표시줄, 창 경계는 고려되지 않음)

 

cv2.resizeWidow('immage', 300, 300)

 

7. 영상 출력하기

cv2.imshow 명령어를 이용하여 영상을 출력할 수 있습니다.

cv2.waitKey와 같이 써주어야 작동합니다.

 

cv2.imshow(winname, mat) -> None

 winname : 영상을 출력할 대상 창 이름

 mat : 출력할 영상 데이터(numpy.ndarray)

 

[참고 사항]

 unit16, int32 자료형 행렬의 경우, 행렬 원소 값을 255로 나눠서 출력합니다.

 float32, float64 자료형 행렬의 경우, 행렬 원소 값에 255를 곱해서 출력합니다.

 만약 winname에 해당하는 창이 없으면 창을 새로 만들어서 영상을 출력합니다. (AUTTOSIZE 기본값)

 Windows 운영체제에서는 ctrl + C(복사), ctrl + S(저장) 지원합니다.

 실제로는 cv2.waitKey() 함수를 호출해야 화면에 영상이 나타납니다.

 

cv2.imshow('image', img)
cv2.waitKey() # 꼭 같이 써줘야 합니다.

 

 이 명령어를 실행하면 img변수에 저장해두었던 고양이 사진이 출력됩니다.

 

8. 키보드 입력 대기

cv2.waitKey 명령어를 이용하여 입력 대기를 할 수 있습니다.

imshow 명령어와 함께 이용합니다.

 

cv2.waitKey(delay=None) -> retval

 delay : 밀리초 단위 대기 시간. 기본값은 0(무한히 기다림)

 retval : 눌린 키 값(ASCII code), 키가 눌리지 않으면 -1

 

[참고사항]

 cv2.waitKey() 함수는 OpenCV창이 하나라도 있을 때 동작합니다.

 특정 키 입력을 확인하려면 ord()함수를 이용합니다.

 주요 특수키 코드 : 27(ESC), 13(ENTER), 9(TAB)

 

cv2.waitKey() # 키보드 입력을 누를 때 까지 보여줌

cv2.waitkey(2000) # 2초동안 대기

# esc 눌러야 종료
while True:
    if cv2.waitKey() == 27: # esc(27) 눌러야 종료
        break
        
        
# q 눌러야 종료
while True:
    if cv2.waitKey() == ord('q'): # ord는 ASCII 코드로 변환해줌
        break

 


 

 이상으로 OpenCV 기본 명령어를 알아보았습니다. 감사합니다~

 

반응형