HRD
現(xiàn)在手機都有 HDR 的功能梯浪,我最開始接觸 HDR 是在做動畫是時候接觸到 HDR封豪,尤其是渲染動畫場景,做環(huán)境球來給場景添加光照的時候都會使用 HDR 作為貼圖朽寞,因為 HDR 中有豐富的曝光信息识窿。便于調光。
有的時候我們想要天空拍攝藍色一點脑融,讓整體看上去更加真實喻频,不夠這可能因為我們?yōu)榱伺臄z藍色天空,而縮短的快門時間從而降低曝光時間肘迎,這樣環(huán)境就會看了比較暗甥温,如上圖右側效果,不過有了 HDR 這樣問題就可以得到解決妓布,一會兒我們會多 HDR 生成進行介紹并且用 python 代碼來實現(xiàn)一個合成 HDR 效果姻蚓。
相機HDR是指高動態(tài)光照渲染(High-Dynamic Range,簡稱HDR)匣沼,這里的動態(tài)是指不同曝光狰挡,可以直接在圖上條件圖片亮度,其實就是預先在不同曝光(也就是快門時間)下拍攝多張圖片進行合并為一張圖像释涛。這張圖片可以提供更多光照信息加叁,這樣也便于后期處理。
import cv2
import numpy as np
def readImagesAndTimes():
# 表示不同曝光時間
times = np.array([ 1/30.0, 0.25, 2.5, 15.0 ], dtype=np.float32)
filenames = ["img_0.033.jpg", "img_0.25.jpg", "img_2.5.jpg", "img_15.jpg"]
images = []
for filename in filenames:
im = cv2.imread(filename)
images.append(im)
return images, times
if __name__ == '__main__':
# 讀取圖片和曝光時間
images, times = readImagesAndTimes()
# 將讀入多張圖片進行對齊
alignMTB = cv2.createAlignMTB()
alignMTB.process(images, images)
# 獲取照相機響應函數(shù) (CRF)
calibrateDebevec = cv2.createCalibrateDebevec()
responseDebevec = calibrateDebevec.process(images, times)
# 將多張圖片合成 HDR 圖片
mergeDebevec = cv2.createMergeDebevec()
hdrDebevec = mergeDebevec.process(images, times, responseDebevec)
# 保存 HDR 圖.
cv2.imwrite("hdr_image.hdr", hdrDebevec)