본문 바로가기
OpenCV/OpenCV-Chapter

CH01 OpenCV-Python(Image? OpenCV?)

by 그때 그때 끄적 2021. 12. 18.
반응형

영상(image)이란?

• 픽셀(pixel)이 바둑판 모양의 격자에 나열되어 있는 형태 (2차원 행렬)

• 픽셀: 영상의 기본 단위, picture element, 화소(畵素)

그레이스케일(grayscale) 영상( 1byte )

• 흑백 사진처럼 색상 정보가 없이 오직 밝기 정보만으로 구성된 영상

밝기 정보를 256 단계로 표현

Pixel 프로그래밍 값(표현방법) = np.uint8

- 총 256개의 구간으로 밝기를 나누고 해당 밝기에 매칭 되는 구간의 정보를 데이터로 저장하는것을 "양자화" 라고 부른다.

Y = 0.299R + 0.587G + 0.114B
RGB 영상을 GrayScale로 변환??
장점: 저장용량 ↓, 처리속도↑
단점: 색상정보 상실 so, Color 정보가 중요할 때는 진행 X

 

트루컬러(truecolor) 영상( 3byte )

• 컬러 사진처럼 색상 정보를 가지고 있어서 다양한 색상을 표현할 수 있는 영상

Red, Green, Blue 색 성분을 256 단계로 표현

-  컬러 이미지에서는 R G B 의 밝기 값 3개를 "양자화" 하여 저장

=> 256(3제곱) = 16,777,216 색상 표현 가능

• Pixel 프로그래밍 값(표현방법) = tuple, np.ndarray

 

 

 

 

• R, G, B 색 성분의 크기를 각각 0 ~ 255 범위의 정수로 표현

• 0 : 해당 색 성분이 전혀 없는 상태

• 255 : 해당 색 성분이 가득 있는 상태

 

 

 

 

 

 

 


영상의 표현 방법

영상: 가로*세로 / OpenCV: 세로*가로

  • 작업을 진행할 때 이 부분을 정확히 명시해줄 필요가 있음
  • 기본적인 2차원 x,y가 아니라 y가 밑으로 감


영상 파일 형식 특징

1. BMP: 압축 x, 그대로 저장(파일 용량이 큰 편)
2. JPG: 압축==>손실압축 so, Pixel 값이 조금씩 바뀜(=결과값이 달라질 수 있음) - 잘안씀
3. GIF: 움직이는 GIF지원(git hub readme), 화질이 떨어짐 - 잘 안씀 
4. PNG: Portable Network Graphics( 무손실 압축+ 알파채널(투명도) 지원 )

https://cord-ai.tistory.com/168

 

이미지 및 영상 압축 방식

" 사진(이미지) = (가로 * 세로)를 가득 메우고 있는 점 Pixel들이 모여있는 것 " 사진의 한 점 한 점마다 어떤 색에 해당되는지를 색깔에 대응되는 숫자로 기록해두면 사진을 볼 때는 역으로 그 숫

cord-ai.tistory.com


OpenCV 이미지 처리를 위한 구성요소

- 이미지의 크기, 정밀도, 채널

 

1. 이미지 크기(Image Size)

고화질의 이미지의 경우, 이미지의 크기가 매우크다.

= 그에 따라 영상 처리를 진행할 경우, 이미지의 크기 만큼 데이터가 생성되어 너무 많은 연산을 진행

so, 이미지의 크기를 변경하는 메소드 (Image Pyramid, Resize) 등을 전처리 후 적용

 

2. 정밀도(Bit Depth)

= 비트 깊이, 색상 깊이, 색 심도

정밀도란 이미지가 얼마나 많은 색상을 표현할 수 있는지를 의미

정밀도가  더 많은 색상을 표현할 수 있어서 데이터의 폭이 넓어지고 더 자연스러운 이미지 형성

정밀도가 육안으로 확인할 수 없을 정도의 변형

==> 일반적으로 유효 비트가 많을수록 데이터의 처리 결과는 더 정밀해진다.

* 1-bit

1-Bit의 경우, 0 1의 두 가지의 값만 가지게 되어 모든 색상을 0의 값을 지니는 색상 

1의 값을 지니는 색상으로만 표현

== 두 가지의 색상이 아닌 두 가지의 값으로 표현할 수 있다는 의미

* 8-bit

2x2x2x2x2x2x2x2=256을 의미(256 가지의 방법으로 값을 표현)

최소 8-Bit를 가질 때 유의미한 데이터를 얻게되어 색상을 표현 = 흑백의 색상을 원할하게 표현

 

OpenCV에서는 U8의 값을 가장 많이 사용(unsigned 8-bit intergers)

signed의 경우에는 -127~127의 값을 표현할 수 있으며, unsigned의 경우, 0~255의 값을 표현

3. 채널(Channel)

- 그래픽스 이미지의 색상 정보를 포함

채널(Channel)은 일반적으로 Red, Blue, Green과 추가적으로 Alpha가 존재

(이외에도 HSV, YCrCB, ...  존재)

RGB라고 표현하지만 OpenCV는 BGR로 표현

색상: 3 ~ 4 채널의 값을 사용( 다 채널 또는 다중 채널

흑백: 1 채널의 값을 사용( 단일 채널 )

이미지에서 이미지를 채널별로 분리했을 때 = cv.split(BGR)
R의 성분, G의 성분, B의 성분만 따로 뽑아내서 출력하면 흑백으로 출력됨
*why?*
한 가지의 채널로만 색상을 표현해야하기 때문
== 즉, 해당 성분에 가까울수록 하얀색으로 출력되고 아닌 값은 검은색으로 출력

 

반응형

댓글