이번에 사용할 이미지는
위 사진과 같습니다.
결과물은
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. 출력해보기
결과는 같은것을 볼 수 있습니다.
'AI 컴퓨터 비전프로젝트' 카테고리의 다른 글
[DL] 정규화 (0) | 2024.09.29 |
---|---|
[DL] 균등화, 평탄화단점보완 CLAHE(이미지, 영상 품질관련)(3) (0) | 2024.09.28 |
[DL] 균등화, 평탄화 등 이미지 변환 활용(이미지, 영상 품질관련)(1) (0) | 2024.09.27 |
[DL] YOLO의 흐름 확인하기 좋은 복습 글 (3) | 2024.09.27 |
[ML/DL] 파이토치로 구현한 논리회귀 (5) | 2024.07.23 |