OpenCV 개요 및 환경설정
필요 선수학습
- 파이썬
- 파이썬 라이브러리 (Numpy, Pandas, Matplotlib 등)
개요
- OpenCV
- Gray Bradsky에 의해 1996년 인텔에서 시작된 프로젝트
- 컴퓨터 비전, 머신러닝과 관련된 다양한 알고리즘을 지원
- C++, Python, Java 등의 언어를 지원
- CUDA(Compute Unified Device Architecture), OpenCL (Open Computing Language)에 기반한 인터페이스를 지원
- OpenCV + Python
- OpenCV의 파이썬 API로 C/C++로 된 OpenCV 라이브러리들을 파이썬 래퍼로 감싼 후에 파이썬 모듈을 추가시킨 것
- 속도문제를 해결하기 위해 속도가 문제되는 코드는 C/C++로 코딩하고 파이썬에서 불러 사용할 수 있는 파이썬 래퍼를 제공
- OpenCV 배열은 Numpy 배열로 변환되어 내부 처리를 수행 (Numpy의 모든 연산 가능)
- Numpy, SciPy, Matplotlib 라이브러리와도 호환
추천 사이트
- https://opencv.org/ : OpenCV 공식 사이트
- https://github.com/opencv/opencv : OpenCV github 사이트
- https://docs.opencv.org/4.x/d9/df8/tutorial_root.html : 튜토리얼
- https://docs.opencv.org/ : 온라인 문서 (명령어)
- https://leechamin.tistory.com/category/%F0%9F%90%8DPython/OpenCV?page=10 : 블로그
- https://www.codeproject.com/Tags/OpenCV : 다양한 OpenCV 코드 제공
- https://learnopencv.com/ : 프로젝트에 활용하기 좋은 다양한 코드 제공
- https://github.com/spmallick/learnopencv/tree/master/ : 파이토치로 된 좋은 예시 코드
- https://github.com/spmallick/learnopencv/blob/master/README.md?ck_subscriber_id=1390420859
- https://meissa.tistory.com/ : OpenCV 고급 응용 예시 코드 (딥러닝 학습 포함)
- http://www.computer-vision-software.com/blog/ : 컴퓨터 비젼 관련 해외 블로그
- https://github.com/LongxingTan/Yolov5 : Yolov5 코드
- https://blog.naver.com/samsjang/220498694383 : 블로그
- https://m.blog.naver.com/samsjang/220498694383 : 블로그
- https://cafe.naver.com/opencv : OpenCV 커뮤니티 카페
- https://m.blog.naver.com/teach3450/221906560229 : 블로그 (다양한 알고리즘 소개)
OpenCV 환경 설정
아나콘다 네비게이터에서 설치하는 방법
- 아나콘다 네비게이터 실행
- Python 3.7 사용
- Environments 메뉴를 선택하고 Create 버튼을 클릭
- Name에 OpenCV를 입력하고 Python 버전은 3.7을 선택
- 3.7이 나오지 않는다면 update index 버튼을 클릭하여 업데이터 진행
- Create 버튼을 클릭하여 새로운 환경 생성
- 생성된 환경을 선택하고 리스트에서 Not installed 항목을 선택
- 입력창에 opencv를 입력하여 libopencv, opencv, py-opencv를 선택
- 같은 방법으로 Jupyther, numpy(자동설치확인), pandas, matplotlib, searborn, scikit-learn, tensorflow-gpu, cudnn, codatookit을 선택
- Apply 버튼을 클릭하여 설치 준비
- 새창이 뜨면 선택한 목록을 확인하고 Apply 버튼을 클릭하여 설치 시작
- 생성한 환경으로 주피터 노트북 실행
프롬프트 창에서 설치하는 방법
- https://www.lfd.uci.edu/~gohlke/pythonlibs/ 에서 다운로드하거나 아래와 같이 입력하여 설치
In [1]:
#!pip uninstall opencv-python
#!pip uninstall opencv-contrib-python
In [2]:
# opencv-python : 주요 모듈이 포함된 라이브러리
# opencv-contrib-python : 추가 모듈이 포함된 라이브러리
#!pip install opencv-python==3.4.11.45
#!pip install opencv-contrib-python==3.4.11.45
!pip install opencv-python opencv-contrib-python
Requirement already satisfied: opencv-python in c:\users\gjaischool\anaconda3\lib\site-packages (4.8.1.78)
Requirement already satisfied: opencv-contrib-python in c:\users\gjaischool\anaconda3\lib\site-packages (4.8.1.78)
Requirement already satisfied: numpy>=1.19.3 in c:\users\gjaischool\anaconda3\lib\site-packages (from opencv-python) (1.23.5)
In [3]:
# opencv 설치 확인
import cv2
# 버전 확인
print(cv2.__version__)
4.8.1
In [4]:
#from google.colab import drive
#drive.mount('/content/drive')
In [5]:
#%cd /content/drive/MyDrive/Colab Notebooks/인공지능강의/opencv
이미지를 읽고 출력하기
이미지를 읽고 새창에 출력하기
- cv2.imread(파일명, 이미지 형식) : 이미지 파일을 읽기 위한 객체를 리턴
- 이미지형식 : 칼라 (cv2.IMREAD_COLOR), 흑백(cv2.IMREAD_GRAYSCALE) 등
- cv2.imshow(제목, 이미지 객체) : 이미지 출력
- cv2.waitKey(0) : 키보드 입력을 기다리는 시간 설정 (0 : 계속 기다림)
- 1/1000초 단위
- cv2.destroyAllWindows() : 생성한 윈도우를 모두 닫는다
In [6]:
import cv2
# 이미지 읽기
img = cv2.imread("./images/image.jpg")
# 새창에 이미지 출력
cv2.imshow("test", img)
# 사용자가 아무키나 누를때까지 대기
cv2.waitKey(0)
# 연 창을 닫아준다
cv2.destroyAllWindows()
실습문제 ○ 학습한 OpenCV 함수를 이용해서 다른 이미지를 출력해보자. |
matplotlib를 이용하여 이미지 출력하기
In [7]:
import matplotlib.pyplot as plt
plt.imshow(img)
plt.show
- OpenCV는 색상공간을 BGR(Blue Green Red)을 사용
- Python 이미지들은 RGB(Red Green Blue)을 사용하므로 변환 필요
- 따라서, OpenCV로 읽은 이미지를 Matplotlib으로 출력하려면 색상공간을 변환해야 함
- cv2. cvtColor(img, 색상변환옵션)
- 색상변환옵션 : cv2.COLOR_BGR2RGB, cv2.COLOR_RGB2GRAY, cv2.COLOR_RGB2HSV 등
In [8]:
# R<-> 변경
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img2)
# 눈금 삭제
plt.xticks([])
plt.yticks([])
plt.show()
직접 Red 채널과 Blue 채널을 바꾸기
- b, g, r = cv2.split(img) : img파일을 b,g,r로 분리
- cv2.merge([r,g,b]) : b, r을 바꿔서 Merge
In [9]:
# 실습
실습문제 ○ 다른 이미지를 이용해서 Red 채널과 Blue 채널의 색상을 바꿔보자. |
Widget를 이용해서 이미지 출력하기
In [10]:
!pip install ipywidgets
In [11]:
import ipywidgets as wid
from IPython.display import display
import cv2
img = cv2.imread("./images/image.jpg")
# 이미지를 출력할 위젯 생성
h, w, c = img.shape
# Image 위젯 설정 (이미지 타입, 크기)
img_wid = wid.Image(format="jpeg", width=w, height=h)
# 위젯 출력
display(img_wid)
# 위젯에 읽은 이미지를 출력
# 배열로 된 이미지를 JPG 타입으로 변환
_, en_img = cv2.imencode(".jpeg", img)
# 위젯에 변환된 이미지 전송 - byte 단위로 전송
img_wid.value = en_img.tobytes()
요약 |
○ cv2.imread() : 이미지를 읽음 ○ cv2.imshow() : 새창에 이미지 출력 ○ cv2.cvtColor() : 이미지의 색상공간을 변환 ○ cv2.waitKey() : 키 입력 대기 (1/000초 단위) ○ cv2.destroyAllWindows() : 생성한 윈도우를 모두 닫음 ○ OpenCV 색상공간과 Python의 색상공간이 다르므로 변환이 필요 (BGR → RGB) |
'Study > Python' 카테고리의 다른 글
[OpenCV] - 3 동영상 로드 및 저장 (1) | 2023.10.23 |
---|---|
[Python]OpenCV - 2 이진화 (1) | 2023.10.20 |
[Python] Train Data 실습 (0) | 2023.10.18 |
[Python] Numpy 배열 (1) | 2023.10.17 |
[Python] Matplotlib (0) | 2023.10.16 |