gray image의 channel은 1이 아니다
그냥 channel이 1이면 gray image이고 channel이 3이면 color image다 라고 생각해왔는데...
파이썬으로 gray image를 불렀을때 channel이 3인데 gray로 나오는 것 보고 갑자기 궁금증이 생겼다
핵심은 image의 channel이 3이면 각각 R,G,B pixel의 value값을 나타내는데,
이들이 합쳐져서 color image가 나온다.
그런데 R,G,B pixel의 value가 모두 동일하면 gray image가 나온다
먼저 color image를 보면
Image.open으로 열어서 torchvision.transforms.ToTensor()로 tensor로 바꾸면
from PIL import Image
from torchvision import datasets, transforms
x = Image.open('/content/135066_125017_5437.jpg')
y = transforms.ToTensor()
z = y(x)
각 channel을 보면 value가 약간 다름
실제로 다르다
이제 이미지를 gray scale로 바꾸고
x = Image.open('/content/135066_125017_5437.jpg')
transform_data = transforms.Compose(
[transforms.Grayscale(), transforms.ToTensor()])
z = transform_data(x)
tensor로 된 z를 그대로 이미지로 바꾸고 저장
from torchvision.utils import save_image
save_image(z,'image.jpg')
Image.open()으로 이미지를 열면 gray image다
x = Image.open('/content/135066_125017_5437.jpg')
transform_data = transforms.Compose(
[transforms.ToTensor()])
z = transform_data(x)
z.shape
torch.Size([3, 495, 654])
ToTensor()로 열어보면 3,495,654로 channel이 3이 나온다
각 channel을 열어보면 value가 전부 같은 것 같다
실제로 전부 같다
따라서 gray image는 channel이 3이라면, 각 channel이 나타내는 R,G,B pixel값들이 서로 같다.
R,G,B pixel이 서로 다르면 color로 나타난다.
그래서 처음에 color image면, gray image로 바꿀 수는 있다.
그냥 R,G,B pixel 합쳐서 1/3하면 다 같아지니까...
그런데 이렇게 바뀐 gray image를 원본 color image로 바꿀 수는 없다.. 어떻게 R,G,B로 달라져야하는지를 알 수가 없으니까
-------------------------------------------------------------------------------------------------------------------------------------------
다음으로 opencv를 쓸때
gray image긴 하지만 일단 channel이 3개로 나오고 있는데
이제 cv2.cvtColor()로 색을 바꿀 수 있는걸 아는데
gray image니까 cv2.COLOR_GRAY2RGB 이렇게 바꿔볼려고하면 에러가 난다
cv2.COLOR_BGR2RGB로하면 에러가 안난다
opencv로 열면 기본값이 BGR image이다.
gray image로 보이더라도, opencv는 BGR image로 인식하고 있고 B,G,R pixel이 서로 같기 때문에 눈에는 gray로 보인다.
cv2.COLOR_BGR2GRAY로 해보면 3channel에서 channel이 없어진다
그것도 그런게 3channel의 pixel이 서로 같으니까 그냥 channel 1개만 써도 되는거거든
'딥러닝 > Computer Vision' 카테고리의 다른 글
visual and audio matching modality - SoundNet (0) | 2024.05.02 |
---|---|
pooling은 왜 사용하는가? (0) | 2024.04.23 |
object detection task, SPP Net, R-CNN, YOLO 간단하게 알아보기 (0) | 2024.04.17 |
딥러닝의 시대를 열었던 AlexNet (0) | 2024.04.17 |
간단하게 살펴보는 여러가지 GAN (0) | 2024.04.15 |