선행작업! 작업 쥬피터 다운로드 필수
다음과 같이 나오면 설치완료
# 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
# opencv 설치 확인
import cv2
# 버전 확인
print(cv2.__version__)
4.9.0
# cv2 기능불러오기
import cv2
# img변수에 경로에 있는 이미지, 이미지 타입
img = cv2.imread("images/hanam.jpg", cv2.IMREAD_COLOR)
# 이미지 보여주기 모델에 변수 불러오기
cv2.imshow("model", img)
# 키 대기
cv2.waitKey(0)
# 이미지 종료
cv2.destroyAllWindowd()
# 실습
import cv2 # openCV
from matplotlib import pyplot as plt
# 이미지 불러오기
img = cv2.imread('images/lenna.png', cv2.IMREAD_COLOR)
# # 색변경 (1) - 색상공간을 변환(BGR -> RGB)
# img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 색변경 (2) - 색상코드를 직접 바꿔보기
b,g,r = cv2.split(img)
img2 = cv2.merge([r,g,b])
plt.xticks([])
plt.yticks([])
plt.imshow(img2)
# 실습
# 라이브러리 호출
import ipywidgets as widgets
from IPython.display import display
import cv2
# 이미지가져오기
img = cv2.imread('images/lenna.png', cv2.IMREAD_COLOR)
# 원본 이미지의 크기
# 행, 열, 색상채널
h, w, c = img.shape
# 이미지 위젯 설정(이미지의 형식, 크기)
image_widget = widgets.Image(format='jpeg', width=w, height=h)
# 위젯 출력
display(image_widget)
# 위젯에 이미지 출력
# 현재 읽어들인 이미지는 Numpy 배열 타입으로 바뀜 -> jPEG 타입으로 변환
# _ 변수는 값만 담아주고 안쓰는 변수를 할때, _(언더바) 변수를 사용함..
_, en_image = cv2.imencode(".jpeg", img)
# 변환된 이미지를 바이트 단위로 위젯에 전송
image_widget.value = en_image.tobytes()
○ 이미지를 읽고 출력하기, 이미지를 읽고 새창에 출력하기
○ OpenCV 색상공간과 Python의 색상공간이 다르므로 변환이 필요 (BGR → RGB).
○ 직접 Red 채널과 Blue 채널을 바꾸기
cv2.imread('경로/파일명', cv2.이미지 형식(컬러와 흑백 구분))
컬러 : cv2.IMREAD_COLOR
흑백 : cv2.IMREAD_GRAYSCALE
별도의 창을 출력한다.
cv2.imshow(별도창의 이름, 이미지 변수명)
별도의 창이 뜨면 버튼 클릭을 기다린다. (0은 무한)
cv2.waitKey(0)
위 버튼이 눌러지면 창이 종료됨.
cv2.destroyAllWindows()
matplotlib 이용하여 이미지 출력
plt.xticks([]) : x축의 표를 안나오게 해주는 기능
plt.yticks([]) : y축의 표를 안나오게 해주는 기능
plt.imshow(변수명) : cv2.imshow()와 다른 점은 창이름을 넣으면 에러발생!
opencv와 python의 컬러 매칭이 다름
1번째 방법 : cv2.cvtColor(변수명, 색상변환옵션)
색상변환옵션 : cv2.COLOR_BGR2RGB, cv2.COLOR_RGB2GRAY, cv2.COLOR_RGB2HSV 등
2번째 방법 : b, g, r = cv2.split(변수명) : 변수파일을 b, g, r로 분리
b, g, r = cv2.split(img)
img2 = cv2.merge([r, g, b])
원본 이미지 크기 (행, 열, 색상)
h, w, c = img.shape
이미지 위젯설정(이미지 형식, 크기)
image_widget = widets.Image(format='jpeg', width=w, height=h)
위젯 출력
display(imge_widget)
위젯에 이미지 출력
현재 읽어들인 이미지는 Numpy 배열 타입으로 바뀜 -> JPEG 타입으로 변환
_(언더바) 변수는 값만 담아주고 안쓰는 변수를 사용할때 쓰임.
_, en_image = cv2.imencode(".jpeg", img)
변환된 이미지를 바이트 단위로 위젯에 전송
image_widet.value = en_image.tobytes()