본문 바로가기
AI 컴퓨터 비전프로젝트

[DL] 균등화, 평탄화 등 이미지 변환 활용(이미지, 영상 품질관련)(2)

by 바다의 공간 2024. 9. 27.

이번에 사용할 이미지는

원본이미지

위 사진과 같습니다. 

 

결과물은 

 


import cv2

img= cv2.imread('./field.bmp')

'''
2.색공간
YCbCr(Y는 고정, Cb, Cr은 순서 변경가능)
- 색 공간을 밝기 정보로 표현하는 방식
- Y: 밝기 정보 / 나머지 cb, cr가지고 색상을 조합하는 구조임

HSV
- 색을 표현하는 방법이자 색을 배치하는 방식
- H(색상, 빨강녹색파랑) , S(채도, 선명도), V(명도, 빛의 밝기)의 좌표를
색으로 지정
'''

ycrcb = []
dst = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)
ycrcb = cv2.split(dst) #y=0, cr=1, cb=2

#결과가 튜플형태로나오기때문에 못바꾸니까 리스트로 변환해주는 작업
ycrcb = list(ycrcb)
# print(ycrcb)

# y성분만 평탄화작업해보기
ycrcb[0] = cv2.equalizeHist(ycrcb[0])
dst = cv2.merge(ycrcb)
dst = cv2.cvtColor(dst,cv2.COLOR_YCrCb2BGR)

cv2.imshow('img', img)
cv2.imshow('dst', dst)

cv2.waitKey()

 

** 여기서 1번 예제와 비슷하지만 merge 가 나와서 다시 정리**

 

  • 평탄화된 Y 성분과 원래의 Cr, Cb 성분을 다시 하나의 이미지로 합칩니다.
  • 이때 Y 성분만 수정되고 Cr과 Cb는 그대로 유지되므로, 색상 정보는 유지하면서 밝기만 조정됩니다.

컬러가있는걸 한 채널만 떼어서 조절할 수 있는것을 확인하고 직접해볼 수 있었습니다.


# task 문제

 

#split()와 merge()를 사용하지 않고 (2)번 예와 동일한 결과 영상을 만들어보기

#split와 ,merge사용하지 않고 평탄화 작업 해보기
# ---------------------------------
import cv2

img= cv2.imread('./field.bmp')

#bgr-->Ycbcr로 변환
dst = cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb)
#dst평탄화
dst[:, :, 0] = cv2.equalizeHist(dst[:, :, 0])
dst=cv2.cvtColor(dst, cv2.COLOR_YCrCb2BGR)

cv2.imshow('img', img)
cv2.imshow('dst', dst)
cv2.waitKey()

주요 내용을 적자면

1. 영상은numpy 배열로 있기때문에 분리하거나 다시 합치지않고 사용함

2. BGR->YCrCb로 변경 후 Y에 대한 부분만 슬라이싱하여 나눠주고 평탄화 진행

3. Ycrcb --> BGR로 다시 변환해줌

4. 출력해보기

 

결과는 같은것을 볼 수 있습니다.