[Computer Vision]
이미지 다루기
아래의 이미지를 사용해 학습하였다. (색이 다양해 효과를 알아보기 좋을 것 같았다.)
cv2.imread()로 이미지를 받아와 이미지를 출력하면 아래와 같은 이미지가 출력된다.
색이 반전된 듯이 나오는데 이는 OpenCV가 우리가 흔히 쓰는 RGB 형식이 아닌 BGR로 이미지를 보여주기 때문이다.
그럼 원본 이미지 그대로 출력하려면 어떻게 해야 할까.
Matplotlib는 OpenCV와 달리 RGB로 이미지를 보여주기 때문에 원본 이미지를 Matplotlib로 받아오면 된다.
하지만 OpenCV로 원본 이미지 그대로 출력할 수도 있다. 이미지의 색 채널을 역순으로 조정하면 된다.
plt.imshow(image[:,:,::-1])
이미지의 밝기를 조절해 어둡게 혹은 밝게 만들 수 있다.
이미지를 어둡게 하려면 이미지의 밝기 값을 줄여주면 된다. 그럼 아래와 같은 이미지가 출력된다.
plt.imshow(image//2)
반대로 이미지를 밝게 하려면 이미지의 밝기 값을 늘려주면 된다. 그럼 아래와 같은 이미지가 출력된다.
plt.imshow(image*2)
그런데 의도와는 다르게 이상한 이미지가 출력되었다. 이는 밝기 값의 최댓값이 255인데 밝기 값을 늘려주는 과정에서 밝기 값이 255를 넘어섰기 때문이다. 이를 해결하려면 범위를 지정하여 255를 넘으면 255로 설정하도록 지정해주면 된다.
image = image*2
image[image>255]=255
plt.imshow(image.astype(np.uint8))
Translation
이미지 translation에는 크게 crop과 padding이 있다.
crop은 이미지를 자르는 것이고 padding은 이미지를 덧대는 것이다.
1) crop - 이미지 자르기
이미지의 첫 번째 인덱스는 이미지의 세로, 두 번째 인덱스는 이미지의 가로, 세 번째 인덱스는 색을 나타낸다.
이미지의 가로 및 세로의 어느 부분을 보여줄 것인지 정해 첫 번째와 두 번째 인덱스의 값을 조정해주면 이미지를 자를 수 있다.
image = image[100:200, 100:200, :]
plt.imshow(image)
2) padding - 이미지 덧대기
padding에는 크게 두 가지 방법이 있다.
이미지에 붙일 패드를 만들어 padding 하거나 이미지보다 큰 패드에 이미지를 넣어 padding 한다.
먼저 이미지에 붙일 패드를 만들어 padding 해보자.
검은색으로 된 패드를 이미지의 양쪽에 붙인다고 하면 패드의 세로 길이는 이미지의 세로 길이와 같아야 한다.
따라서 다음과 같이 작성한다.
pad = np.zeros((image.shape[0], 50, 3)).astype(np.uint8)
이렇게 만든 패드를 이미지의 양옆에 붙일 것이므로 axis의 값을 1로 지정해 concatenate 한다.
tmp = np.concatenate((pad, image, pad), axis=1)
plt.imshow(tmp)
이미지의 모든 면에 padding을 해본다고 하면 앞서 만든 이미지의 위아래에 padding 해주면 된다.
이번엔 위아래에 패드를 붙일 것이므로 패드의 가로길이가 이미지의 가로길이와 같아야 한다.
그리고 axis의 값을 0으로 지정해 concatenate 한다.
pad2 = np.zeros((50,tmp.shape[1], 3)).astype(np.uint8)
tmp2 = np.concatenate((pad2, tmp, pad2), axis=0)
plt.imshow(tmp2)
다음으로 이미지보다 큰 패드에 이미지를 넣어 padding 해보자.
가로, 세로의 길이가 이미지의 가로, 세로 길이보다 긴 패드를 생성한다.
pad = np.zeros((image.shape[0]+200, image.shape[1]+200, 3)).astype(np.uint8)
이 패드의 가운데에 이미지를 위치시킨다고 하면 이렇게 작성할 수 있다.
pad[100:image.shpae[0]+100, 100:image.shape[1]+100, :] = img
plt.imshow(pad)
'2022 하계 모각코' 카테고리의 다른 글
[3회차] 학습 계획서 (0) | 2022.07.14 |
---|---|
[2회차] Computer Vision - Scaling (0) | 2022.07.07 |
[2회차] 학습 계획서 (0) | 2022.07.07 |
[1회차] 학습 계획서 (0) | 2022.06.30 |
계획서 (0) | 2022.06.23 |