[OpenCV] # 2. 이미지 대칭 및 색 변환

Crush_on_Study·2022년 6월 24일
0

OpenCV공부

목록 보기
3/3

이미지 대칭

이미지 대칭

이미지 대칭함수에 대해 알아봅시다. 간단한 코드에요.
말 그대로 원본 이미지를 갖고 상하반전, 좌우반전, 상하좌우반전 모두가 가능합니다.

전체 코드

import cv2

image = cv2.imread("Earth_2.jpg",cv2.IMREAD_ANYCOLOR)
remage = cv2.resize(image,None,fx=0.4,fy=0.4,interpolation=cv2.INTER_AREA)
remage_ver = cv2.flip(remage,0)
remage_hor = cv2.flip(remage,1)
remage_both = cv2.flip(remage,-1)

cv2.imshow("original",remage)
cv2.imshow("ver",remage_ver)
cv2.imshow("hor",remage_hor)
cv2.imshow("both",remage_both)

cv2.waitKey(0)
cv2.destroyAllWindows()

결과 화면


사용 하는 함수는 'flip' 입니다.

  • 한번 더 코드의 형태에 대해 짚어보겠습니다. 지금 위 코드를 보시면 cv2.flip() 형태로 이뤄지고 있습니다. 여기서 .의 의미는 C++에서와 똑같이 직접참조 라는 뜻입니다.

즉, flip함수는 cv2 라이브러리 안에 내장된 함수이므로 cv2에서 가져온 함수는 flip이다. 라는 의미를 갖고 있습니다.

  • 다음으로 볼 것은 cv2.flip(원본이미지,flip code) 입니다.
    원본 이미지는 저희가 imread함수를 통해 불러온 애입니다. 따라서, flip함수를 쓰려면 먼저 원본이미지가 호출되어 있어야 합니다.

flip code?

원본 이미지 옆에 제가 숫자로 0,1,-1을 적어놓은게 보일 겁니다. 이걸 플립코드라 하는데요. 정확히 따지자면 0,양수,음수입니다. 즉, 0을 제외하고는 어떤 숫자를 넣어도 됩니다.

  1. flip code = 0 : 0은 상하대칭의 의미를 가집니다.
  2. flip code > 0 : 양수는 좌우대칭의 의미를 가집니다.
  3. flip code < 0 : 음수는 상하좌우대칭의 의미를 가집니다.

색 변환

cv2.cvtColor?

색 변환에는 크게 2가지 유형이 있습니다. 아래 소제목들을 통해 살펴봅시다.

원본 이미지에서의 변환

사진 보시면 코드에 원본 이미지를 호출 할 때, cv2.IMREAD_GRAYSCALE 이란게 보입니다. ANYCOLOR, UNCHANGED , COLOR 등등은 사실상 원본이미지 거의 그대로 출력하는 타입들입니다.

근데 여기 GRAYSCALE은 원본이미지를 흑백으로 출력하는 타입입니다.


원본 이미지 호출 후 cvtColor 함수로 변환

결과는 똑같습니다. 다만, 'cvtColor' 함수를 통해서 COLOR타입에서 하나를 선택하여 흑백으로 바꿨습니다. 이름에서도 유추가 가능하듯이 기존의 RGB채널에서 GRAYSCALE로 바꾸는 것입니다.

  • OpenCV에서는 RGB순서가 아니라 BGR순서로 정의되어 있습니다.

흑백 이미지로 변환하는 이유가 뭔가요?

  • 흑백 이미지는 채널이 0과 1로만 이루어져 있습니다. 그렇기에 연산속도가 RGB일 때보다 훨씬 빠릅니다. 나중에 사물인식 / 윤곽선 검출 등등을 진행할 때, 웬만하면 원본 이미지를 흑백으로 Conversion한 뒤, 진행합니다.
profile
방구석백수 코드몽키

0개의 댓글