CNN 모델에 학습을 시키기 전 하고자 하는 목표에 맞게 이미지를 전처리하여 학습을 시키면 더 좋은 효과를 볼 수 있다. 

이미지에서 필요없는 부분이 있는지, 특정 영역만을 추출해도 되는지 개발자의 주관적 생각으로 판단하여야 한다. 

 

여기서 주관적이라는 말이 매우 거슬리지만 이미지란 참 복잡하다. 

 

만약 사람을 검출하고 싶은데 사람의 머리카락이 검은색이라 검은색만을 추출했더니 옆에 있던 맨홀이 나온다던지 할 수 있다. 

 

나도 computer vision에 대하여 잘 알지 못하지만 이제 시작함으로써 내용정리를 시작한다. 

 

 

1. imread

image = cv2.imread("FILE_PATH", cv2.IMREAD_COLOR)

  • imread = image read 이미지를 읽는 함수이다 
  • 첫 파라미터로 파일의 경로(image.jpg)를 입력하고 두 번째 파라미터로 어떤 색상으로 읽어올 건지에 대해 입력한다. 
    • cv2.IMREAD_COLOR : 이미지 파일을 Color로 읽어들입니다. 투명한 부분은 무시되며, Default값입니다.
    • cv2.IMREAD_GRAYSCALE : 이미지를 Grayscale로 읽어 들입니다. 실제 이미지 처리 시 중간단계로 많이 사용합니다.
    • cv2.IMREAD_UNCHANGED : 이미지파일을 alpha channel까지 포함하여 읽어 들인다. 하지만 이미지에 alpha channel에 대한 정보가 있어야 다르다 위에 사진과 같이 COLOR와 UNCHANGED가 똑같다

 

2. imshow, waitKey, destroyAllWindows

cv2.imshow("window_name", image)
key = cv2.waitKey(0)
cv2.destroyAllWindows()
  • imshow = image show 이미지를 윈도우 창에 보여주는 함수이다
  • 첫 파라미터로 띄어질 윈도우의 이름을 설정하고 두 번째 파라미터로 어떤 이미지를 띄울것인지 입력한다
  • waitKey와 destroyAllWindows 는 함께 쌍으로 자주 쓰이는 함수이다. waitKey는 사용자의 키보드 입력이 올때까지 대기하고 destroyAllWindows는 Opencv에서 띄운 모든 윈도우를 종료한다
  • 위의 코드를 보면 imshow 이후 cv2.waitKey(0)에 의해서 그 다음 문단으로 가지않고 sleep()처럼 대기된다. 여기서 waitKey의 함수안에 파라미터로 0이 있는데 이것은 무한대로 기다린다는 의미이다. 만약 사용자의 키보드 입력이 들어오면 waitKey 함수는 끝나게되고 뒤에있는 destroyAllWindows 함수에 의해 띄어졌던 이미지가 종료된다

 

3. imwrite

cv2.imwrite("test.jpg", image)

  • imwrite = image write 이미지를 저장하는 함수이다.
  • 첫 파라미터로 파일이 저장될 경로(test.jpg)를 설정한다 두 번째 파라미터로 저장할 이미지변수를 입력한다.

 

4. cvtColor

image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

  • cvtColor = convert color 이미지의 색상을 변환시키는 함수이다. 
  • 첫 파라미터로 변경할 이미지변수를 입력하고 두 번째 파라미터로 변경할 색상을 입력한다 
  • 변환 가능한 색상 종류에는 BGR2RGB, HSV, GRAY, LAB, LUV, XYZ 등 여러가지가 존재한다 

 

5. resize

image = cv2.resize(image,(608,608))

  • resize = 말그대로 사이즈를 변경한다 
  • 첫 파라미터로 변경할 이미지변수를 입력하고 두 번쨰 파라미터로 변경할 사이즈를 tuple형태로 입력한다
  • 사이즈를 더 작게, 더 크게 변경이 가능하다 하지만 원본의 비율과 다르게 변환하면 형태가 변경될 수 있고 더 작게 변경한다면 비율이 안맞는 부분에 자동으로 padding이 들어가게 된다

 

 

이번에는 기초적으로 이미지를 읽고 이미지 색을 변경하는 법을 정리하였다 

다음에는 numpy를 이용해서 이미지를 합쳐서 보는 법과 간단한 이미지 처리 기법에 대하여 정리하겠다

+ Recent posts