전공 과목 이수2👨‍💻/디지털영상처리

밝기를 트랙바로 조절해보기

천숭이 2021. 10. 27. 14:57
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

# 이미지 불러오고 정규화
Path = 'D:/dip/'
Name = 'dark1.png'
FullName = Path+Name
img = cv.imread(FullName,1)
img=img/255.0
cv.namedWindow('Brighter image')

# scale 트랙바 움직일때 호출되는 콜백 함수
def Change_scale(pos) :
    global img2
    bar = cv.getTrackbarPos("scale", "Brighter image") #-> scale값을 bar에 저장할 수 있다

    scale = 1+pos*0.1                                  # 트랙바 값에 따른 밝기의 정도
    img2 = img.copy() * scale
    img2=np.clip(img2,0,1)

    addh = cv.hconcat([img,img2])

    cv.putText(addh, 'Original', (50,50), cv.FONT_HERSHEY_SIMPLEX, 1,(0,0,255), 2)
    cv.putText(addh, 'Brighter', (img.shape[1]+50, 50), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
    cv.imshow('Brighter image',addh)

cv.createTrackbar('scale',                            # 밝기 조절 트랙바 이름
'Brighter image',                                     # 창의 이름
15,                                                   # 슬라이더 초기 위치
30,                                                   # 슬라이더의 최댓값
Change_scale)                                         # 슬라이더 움직일 때 호출될 콜백 함수의 이름

while True :
    # s키를 누르면 img2가 저장됨
    if cv.waitKey() == ord('s'):
        bar = cv.getTrackbarPos("scale", "Brighter image")
        filename = f'tmp{bar:#2d}_{Name[:-4]}.PNG'

        # uint8로 변환해서 출력
        cv.imwrite(filename,(img2*255).astype(np.uint8))

    # esc(아스키코드값 : 27)를 누르면 while문 나가면서 프로그램 종료
    if cv.waitKey() == 27 :
        break