OpenCV

Color Transfer 필터 입히기

728x90
import cv2
import numpy as np

src = cv2.imread('data/images/image1.jpg')
dst = cv2.imread('data/images/image2.jpg')

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

output = dst.copy()

#lab로 변환
srcLab = cv2.cvtColor(src, cv2.COLOR_BGR2LAB)
dstLab = cv2.cvtColor(dst,cv2.COLOR_BGR2LAB)
outputLab = cv2.cvtColor(output,cv2.COLOR_BGR2LAB)

srcLab = srcLab.astype('float')
dstLab = dstLab.astype('float')
outputLab = outputLab.astype('float')

print(srcLab)

#채널 분리
srcL, srcA,srcB = cv2.split(srcLab)
dstL,dstA,dstB =cv2.split(dstLab)
outputL,outputA,outputB = cv2.split(outputLab)

#색 바꾸기
outputL = dstL-dstL.mean()
outputA = dstA-dstA.mean()
outputB = dstB-dstB.mean()

outputL = outputL+srcL.mean()
outputA = outputA+srcA.mean()
outputB = outputB+srcB.mean()

#얻고자 하는 이미지
outL = (outputL*srcL.std() / dstL.std())
outA = (outputA*srcA.std() / dstA.std())
outB = (outputB*srcB.std() / dstB.std())

#눈으로 보기위한 코드? 사진은 0~255 사이값으로 세팅
outL = np.clip(outL,0,255)
outA = np.clip(outA,0,255)
outB = np.clip(outB,0,255)

#채널 합치기
outputLab = cv2.merge([outL, outA, outB])

#이미지는 정수. 위의 작업은 float이므로 형 변환 실행
outputLab = np.uint8(outputLab)

#imshow는 BGR이므로 바꿔준다.
outLab = cv2.cvtColor(outputLab, cv2.COLOR_LAB2BGR)

cv2.imshow('outLab', outLab)



cv2.waitKey(0)
cv2.destroyAllWindows()

728x90

'OpenCV' 카테고리의 다른 글

contrast Scaling 대비  (0) 2021.04.20
brightness 밝기 조절  (0) 2021.04.20
desaturation  (0) 2021.04.20
hueHistogram  (0) 2021.04.20
virtual Bilbord(빌보드 전광판 사진 바꾸기)  (0) 2021.04.20