자율주행

Windows 10 Anaconda Jupyter OpenCV 기초사용법 I

coding art 2022. 8. 27. 21:29
728x90

참조: OpenCV Tutorial :   Guide to Learn OpenCV (Linux Version)

https://pyimagesearch.com/2018/07/19/opencv-tutorial-a-guide-to-learn-opencv/

 

이번 장에서는 카메라 웹캠 대신 쥬라식 파크 이미지 파일을 사용해 OpenCV의 기초적인 명령들을 실습해 보도록 한다. 이하의 내용은 Raspbian 또는 Linux 또는 Ubuntu OS를 대상으로 씌여진 블로그 저자 Adrian의 OpenCV tutorial 내용을 윈도우즈 10에서 처리할수 있도록 전면 수정하였다.

 

윈도우즈 10 아나콘다에 OpenCV를 설치했으면 이미지 파일을 사용한 간단한 처리법을 알아보자. OpenCV 설치과정에서 numpy와 함께 이미 imutils를 함께 설치해 두었다는 사실을 기억하자.

pip install numpy

pip install imutils

 

윈도우즈 10에서 웹캠 카메라 설치는 카메라 USB 커넥터를 어느 USB 든지 연결시키면 된다. 확인 방법은 시작 바에서 카메라 아이콘을 찾아 클릭하면 웹캠 카메라 확인이 가능하다. OpenCV에서 연결하여 사용하려면 윈도우즈 10 의 카메라 앱을 반드시 끄도록 해야 한다. 참조 바란다.

 

아래의 JurasicPark 이미지 jp.png 를 다운로드해서 바탕화면의 개인 사용자 폴더에 넣고 Jupyter 를 실행하자. 이 이미지는 블로그에 첨부되어 있다.

 

jp.png
0.28MB

 

필요한 라이브러리들을 import하자. 하나는 imutils 이고 다른 하나는 cv2 이다.

imutils는 이미지 파일과 앞으로도 다루게 될 비데오 스트림 파일을 처리해 줄 수 있는 편의용 즉 유틸리티용 라이브러리이다. cv2 는 바로 opencv 라이브러리 모듈을 지칭하는데 숫자 2 는 관행으로 그렇게 사용한다.

Jupyter 에서 실행해야 할 첫 번째 파이선 명령은 이미지 파일을 읽어 들이는 과정이다. 다른 이미지 그래픽 라이브러리인 matplotlib 에서와 마찬가지로 image read 즉 imread 명령을 사용한다.

 

image.shape 명령에서 shape 은 TensorFlow 머신러닝에서 많이 사용되는 명령으로 이미지 데이터의 매트릭스 구조를 간단히 나타낸다. 명령의 앞부분에 클래스 명령인c v2. 이 없는 경우는 일반 파이선 명령으로 분류되며 cv2. 이 붙어 있으면 Opencv 명령에 해당한다.

 

여기서 h는 이미지 파일의 높이 방향 픽셀 수이며, w 는 폭 방향 픽셀 수이고, d는 픽셀의 B,G,R컬러를 뜻하며 값이 3 이 된다.

불러들인 이미지 파일을 윈도우즈 화면에 디스플레이 하기 위해서는 imshow 명령을 사용하자.

 

waitkey(0) 명령은 코드가 키보드 입력을 대기하게끔 하는 명령이다.

15번 라인을 넘어가기 위해서는 imshow 로 디스플레이 된 image 파일을 한번 클릭한 후에 키보드 0을 입력하면 그 다음 명령으로 진행이 이루어진다.

 

RGB라고 흔히 사용하지만 Opencv 에서는 BGR 로 표현한다. RGB 표현이 사용되기 훨씬 전에 BGR이 사용되던 시기에 이미 Opencv 가 개발되었기 때문에 관행으로 굳었음에 유의하자. Gray scale 에서는 0 이 검정색이며 255 가 가장 밝은 흰색이 된다. 아래 그림은 참고용으로 넣어둔 것이며 실제 코드에서는 숫자 값만 출력됨에 유의하자.

 

쥬라기 파크 사진의 높이 좌표값이 100, 폭 좌표 값이 50인 지점의 B, G, R값을 다음과 같이 출력해 볼 수 있다.

 

  (B, G, R)= image[100, 50]
  print("R={}, G={}, B={}".format(R, G, B))

 

OpenCV 뿐만 아니라 모든 이미지 처리 과정에서 중요한 작업 중의 하나가 ROI(Region of Interest) 즉 관심영역을 도려내는 작업으로서 불필요한 그래픽 이미지 정보를 제거하는 측면도 있지만 한편 도려낸 그래픽 이미지의 크기들을 이미지 처리 코드에 적합한 크기로 사전 조절하는 작업으로서 인공지능 코딩과정에서 Crop 이라고도 한다.

 

아래는 윈도우즈 화면에 직접 출력한 결과이다.

matplotlib 라이브러리가 import 되어 있다면 실제 첨부된 Jupyter 코드에서는 윈도우즈 화면에 출력하지 않고 셀(cell) 코드 실행 후 출력란에 inline  방식으로 이미지를 출력하기로 한다.

 

 

다음 프로그램의 image[60:160, 320:420]에서 높이 기준 600에 대한 60:160, 폭 기준 400에 대한 320:420 부분을 잘라내는 작업을 뜻한다.

 

주어진 이미지 파일 전체의 크기를 조절하는 Resize에 대해서 알아보자. 다음 사례는 600:400 이미지를 200:200 으로 Resize 한 경우다. Resize(a, b)에서 a 는 폭이고 b 는 높이가 된다.

 

 

다음 사례는 폭과 높이 비율을 일정하게 유지하는 Resize 사례이다.

 

가로 세로 비율을 계산할 필요 없이 한쪽 값만 지정하고도 동일한 효과를 주는 imutils.resize 명령을 사용하는 코드이다.

 

 

이미지 회전 기법이다. 문제는 이미지 일부가 잘려 나간다는 점이다.

 

 

imutils 명령 한 줄을 사용하여 동일한 효과를 얻어낼 수 있다.

 

 

imutils.rotate_bound 명령을 사용 잘림이 없이 이미지 회전이 이루어졌다.

 

 

이미지 전체를 가우시안 필터 사용으로 뿌옇게 변화시키자.

 

 

첨부된 Jupyter 코드는 inline 방식으로 처리되어 있음에 유의하자.

JurasicPark.ipynb
0.98MB