1. image 결합
file_name = "checker_board.png"
image = cv2.imread(file_name, cv2.IMREAD_COLOR)
image2 = cv2.imread(file_name, cv2.IMREAD_GRAYSCALE)
image2 = np.stack((image2,)*3, axis=-1)
image = cv2.resize(image, (400,400))
image2 = cv2.resize(image2, (400,400))
image = np.concatenate((image, image2),axis=1)
- opencv imread 는 numpy 객체로 이미지를 불러오게 된다 그렇기에 numpy 모듈을 사용하여 이미지를 수직, 수평으로 이어붙이기를 하여 원본이미지와 변경 이미지를 한눈에 보기 쉽게 펼칠 수 있다
- grayscale 이미지와 color 이미지의 차원이 다르기 때문에 grayscale의 차원을 numpy의 stack을 이용하여 같은 이미지를 3번 중복하여 차원을 (x, x, 3) 으로 color 차원과 같게 맞추었다
- numpy.concatenate = 넘파이 객체를 잇는다
- 첫 파라미터는 tuple 형태의 image 객체 2개이고 두 번째 파라미터는 수직 또는 수평을 결정하는 axis 이다
- axis=0 은 수직(세로)으로 잇는다 axis=1은 수평(가로)으로 잇는다
2. 외곽선 검출
image = cv2.imread('milk.jpg', cv2.IMREAD_COLOR)
image2 = image.copy()
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
return_value, threshold_image = cv2.threshold(gray_image,0,255,cv2.THRESH_BINARY + cv2.THRESH_OTSU)
contours, hierarchy = cv2.findContours(threshold_image,
cv2.RETR_LIST,
cv2.CHAIN_APPROX_NONE)
for contour in contours:
cv2.drawContours(image,contour,-1,(0,0,255),2)
threshold_image = np.stack((threshold_image,)*3, axis=-1)
image = np.concatenate((image,threshold_image), axis=1)
image = np.concatenate((image,image2), axis=1)
- cv2.threshold( image, min_value, max_value, TYPE )
- 2차원 이미지만 입력으로 넣을 수 있기 떄문에 grayscale로 변환헀다
- threshold를 해주는 이유는 외곽선을 찾을 때 색상정보를 단순하게 변경하여 (0과 255로) 외곽선을 더 찾기 쉽게 할 수 있다.
- threshold의 파라미터는 (image_source, min_value, max_value, TYPE)이다
TYPE의 종류
cv2.THRESH_BINARY
cv2.THRESH_BINARY_INV
cv2.THRESH_TRUNC
cv2.THRESH_TOZERO
cv2.THRESH_TOZERO_INV
cv2. THRESH_OTSU : 이진화를 할 때 히스토그램 분석을 통해 자동으로 임계값을 찾아준다
- cv2.findContours( image, mode, method)
- 이진 이미지에서 외곽선을 자동으로 검출해 준다
- mode 의 종류
cv2.RETR_EXTERNAL : 외곽선중 가장 바깥쪽 선만 리턴한다
cv2.RETR_LIST : 모든 외곽선을 찾지만 계층관계는 구성하지 않는다
cv2.RETR_CCOMP : 모든 외곽선을 찾으며 2단계의 계층관계를 구성한다
cv2.RETR_TREE : 모든 외곽선을 찾으며 모든 계층관계를 구성한다
여기서 계층이란 검출된 외곽선 안에 있는 또다른 외곽선을 뜻한다 - method 의 종류
cv2.CHAIN_APPROX_NONE : 모든 point를 저장
cv2.CHAIN_APPROX_SIMPLE : 4개의 point만을 저장하여 메모리를 절약
cv2.CHAIN_APPROX_TC89_L1 : Teh_Chin 연결 근사 알고리즘 L1버전을 적용하여 point 개수를 줄임
cv2.CHAIN_APPROX_TC89_KCOS : Teh_Chin 연결 근사 알고리즘 KCOS 버전을 적용하여 point 개수를 줄임
return 값으로 오는 contours의 shape를 찍어보면 각각 method마다 shape이 다른것을 볼 수 있다.각각 method마다의 contours[-1]의 draw 와 shape
'Machine Learning > Computer Vision' 카테고리의 다른 글
(6) OpenCV python - multi label Histogram 분석 (0) | 2021.07.30 |
---|---|
(5) OpenCV python - 2D Histogram 분석 (0) | 2021.07.29 |
(4) OpenCV python - 이미지 데이터 분석 HSV format, 이미지 값 조절 (0) | 2021.07.29 |
(3) OpenCV python - Histogram 분석 calcHist() (0) | 2021.07.27 |
(1) OpenCV python - 기초 ( imread, imshow, imwrite, cvtColor, resize, waitkey, destroyAllWindows) (0) | 2021.06.23 |