티스토리 뷰
OpenCV 에서 Basic image processing 는 다음과 같이 9가지를 이야기 하고 있습니다.
- 1: Translation (상하, 좌우 이동)
- 2: Rotation (그림의 회전 ,중심축이 어디냐?)
- 3: Resizing (이미지의 사이즈 조정, Aspect Ratio고려)
- 4: Flipping (수평, 수직으로 뒤집기)
- 5: Cropping (그림 일부만 가져오기)
- 6: Image arithmetic (그림을 더 진하게, 연하게 만들기)
- 7: Bitwise operations (그림의 Bit 연산)
- 8: Masking (마스크)
- 9: Splitting and merging channels ( Color Channel 로 나누고, 합치고)
오늘은 Resizing, Flipping에 대해서 알아보겠습니다.
Resizing
Resizing 에서 주의할 것은 그림을 줄이거나 늘릴때, 그림의 비율 Aspect Ratio 를 항상 유지해야 한다는 것입니다.
만약 width, height 중에서 긴쪽을 960으로 한다고 한다면, 아래와 같이 해서 Width, Height 을 조정할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 | (h, w) = image.shape[:2] if w > h: x = 960 y = int((longer*h)/w) dim = (x, y) else: y = 960 x = int((longer * w)/h) dim = (x, y) | cs |
두번째는 그림을 줄이거나 늘릴 때, 사용하는 보간법(interpolation) method가 다섯가지 있습니다.
이 보간법을 좀 이해해야 하는데, 기본 이론은 여기서 설명하지 않겠습니다.
- cv2.INTER_NEAREST : 속도가 빠른데, 그림의 품질은 좋지 않음
- cv2.INTER_LINEAR : 사진을 키울 때 사용.
- cv2.INTER_AREA : 사진을 줄일 때 사용.
- cv2.INTER_CUBIC
- cv2.INTER_LANCZOS4)
이것을 종합해 보면 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 | # load the image and show it image = cv2.imread('images/beach.png') # width 을 600 으로 할때 ratio = 600.0 / image.shape[1] dim = (600, int(image.shape[0] * ratio)) # perform the actual resizing of the image resized = cv2.resize(image, dim, interpolation=cv2.INTER_AREA) cv2.imshow("Resized (Width)", resized) | cs |
Flipping
이미지 뒤집기(Flipping)은 매우 간단합니다. X축으로 뒤집기를 할 것인지, Y축으로 할지, 동시에 X, Y축으로 할지만 결정하면 됩니다.
flipCode로 나누는데,
- 0 : X축으로 뒤집기
- 1 (Positive) : Y 축으로 뒤집기 : 양수이면 모두 가능
- -1 (Negative) : 동시에 뒤집기 : 음수이면 모두 가능
소스 코드는 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | image = cv2.imread("images/beach600.jpg") cv2.imshow("Original", image) # X축 뒤집기 flipped = cv2.flip(image, 0) cv2.imshow("X axis", flipped) # Y축 뒤집기 flipped = cv2.flip(image, 1) cv2.imshow("Y axis", flipped) # X, Y축 동시 flipped = cv2.flip(image, -1) cv2.imshow("Both Flipped", flipped) cv2.waitKey(0) cv2.destroyAllWindows() | cs |
그리고 그 결과물은
'OpenCV' 카테고리의 다른 글
OpenCV 기초 - Image Processing(Transition, Rotation) (0) | 2018.04.01 |
---|---|
OpenCV 기초 -마우스 이벤트와 그림(선,사각형,원) 그리기 (0) | 2018.04.01 |
OpenCV 기초 - 이미지 파일 오픈/변경/저장 (0) | 2018.04.01 |
OpenCV 기초 - 왜 RBG가 아니라 BGR로 저장할까? (0) | 2018.04.01 |
댓글