计算机视觉(hdr)

计算机视觉(hdr)_第1张图片
封面

HRD

现在手机都有 HDR 的功能,我最开始接触 HDR 是在做动画是时候接触到 HDR,尤其是渲染动画场景,做环境球来给场景添加光照的时候都会使用 HDR 作为贴图,因为 HDR 中有丰富的曝光信息。便于调光。


计算机视觉(hdr)_第2张图片

有的时候我们想要天空拍摄蓝色一点,让整体看上去更加真实,不够这可能因为我们为了拍摄蓝色天空,而缩短的快门时间从而降低曝光时间,这样环境就会看了比较暗,如上图右侧效果,不过有了 HDR 这样问题就可以得到解决,一会儿我们会多 HDR 生成进行介绍并且用 python 代码来实现一个合成 HDR 效果。

相机HDR是指高动态光照渲染(High-Dynamic Range,简称HDR),这里的动态是指不同曝光,可以直接在图上条件图片亮度,其实就是预先在不同曝光(也就是快门时间)下拍摄多张图片进行合并为一张图像。这张图片可以提供更多光照信息,这样也便于后期处理。


计算机视觉(hdr)_第3张图片
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)
  
  # 获取照相机响应函数 (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)
  

你可能感兴趣的:(计算机视觉(hdr))