코딩 및 기타/이미지

사진의 형식 , grayscale , opencv - 1

정지홍 2025. 1. 7. 13:40
  특징 장점 단점
JPEG / JPG 손실 압축 방식으로 파일 크기를 줄임 용량이 작음 압축으로 인한 일부 이미지 데이터 손실
  사진이나 복잡한 그래픽에 적합 호환성 우수 반복 저장시 품질 저하
  압축률 조정해서 품질과 용량의 균형 조정 가능    
PNG 비손실 압축을 지원 품질 저하 없이 압축 가능 jpeg보다 크기가 큼
  알파채널(투명도)를 지원 투명 배경 사용 가능 대용량 작업시 속도가 느림
  로고,아이콘,일러스트에 적합    
GIF 애니메이션 이미지 지원 간단한 애니메이션 제작 가능 색상 제한으로 고품질에는 적합안함
  8비트 생각 팔레드
즉, 256색으로 제한
작은 크기의 파일  
BMP 압축없이 이미지를 저장 고품질 이미지 가능 파일 크기 매우 큼
  원시 데이터 형식으로 이미지 품질 손상 없음 색상 정보 풍부 현대에서는 잘 안씀

 

Grayscale이미지란?

  • grayscale은 이미지에 대한 정보를 색상 정보가 아니라 명암 정보만 가지고 표현한다.
    • 즉, 색조,채도 없이 밝기 값( 명암 )만으로 구성된 이미지이다.
    • 그러므로 RGB와 다르게 단일 채널로만 표현을 하며, 각 픽셀은 하나의 밝기 값으로 나타냄
      • 위의 이유로 인하여 데이터가 적고 압축 효율도 높다.
    • 명암 대비 ( contrast )
      • 이미지 내에서의 밝기 값의 차이를 나타낸다.
      • 명암 대비가 클수록 이미지에서 밝은 부분과 어두운 부분이 더욱이 뚜렷하게 구분됨.
  • GraySacle 이미지로 변환하기
    • GrayScale = 0.2989×R + 0.5870×G + 0.1140×B 이다.

 

 

 

 

  • 1. 다음은 opencv로 이미지를 읽어서 이미지를 출력한다.
    • openCV는 색상을 BGR( Blue-Green-Red )순서로 읽는다.
    • matplotlib은 색상은 RGB( Red-Green-Blue )순서로 읽는다.
    • imread는 3가지 옵션이 존재
      • 1. cv2.IMREAD_COLOR (기본값) : 컬러 이미지 읽음. BGR형식으로.
      • 2. cv2.IMREAD_GRAYSCLE
      • 3. cv2.IMREAD_UNCHANGED : 알파채널을 포함하여 이미지를 읽음

  • 2. opencv를 가지고 이미지의 color space를 변경
    • openCV의 COLOR_BGR2RGB를 이용하여 출력해보자
      • 그러면 위와 다르게 나올것이다.( red와 blue가 각각 바뀌였으니 )

  • 3. 이번에는 COLOR_ RGB2BGR사용해봄
    • 사실상 COLOR_ RGB2BGR COLOR_BGR2RGB 는 같은 작업을 수행함.

  • 4. 이번에는 그레이스케일로 바꿀것이다.
    • matplotlib으로 출력시에는 cmap옵션을 줘야함
      • cmap = color map을 의미하며, 이미지 출력시, 픽셀값을 어떤 색상으로 표현할지 매핑하는 방식이다.
        • 그래서 color map을 gray를 주어서, 밝기값에 따라서 흑백 색상으로 변환하게 한다.

RGB이미지에 대한 grayscale적용
BGR이미지에 대한 grayscale적용