Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV Python createMergeDebevec返回一个Inf数组_Python_Opencv_Photography_Hdr - Fatal编程技术网

OpenCV Python createMergeDebevec返回一个Inf数组

OpenCV Python createMergeDebevec返回一个Inf数组,python,opencv,photography,hdr,Python,Opencv,Photography,Hdr,我正试图让一些与HDR相关的函数与OpenCV Python一起工作:具体地说,我正试图重现。不幸的是,生成的hdr映像/阵列显示为完全白色(所有值均为Inf)。这是一个例子。1.jpg,2.jpg,3.jpg都是870 × 580 RGB(内部RGB柯达sRGB显示器)JPG图像,曝光时间分别为1/3200、1/800和1/200。我已经用另外两个JPG图像集测试过了,其中一个在上可用 需要注意的一件有趣的事情是,“times”数组在merge.process调用之后被修改 >>&

我正试图让一些与HDR相关的函数与OpenCV Python一起工作:具体地说,我正试图重现。不幸的是,生成的hdr映像/阵列显示为完全白色(所有值均为Inf)。这是一个例子。1.jpg,2.jpg,3.jpg都是870 × 580 RGB(内部RGB柯达sRGB显示器)JPG图像,曝光时间分别为1/3200、1/800和1/200。我已经用另外两个JPG图像集测试过了,其中一个在上可用

需要注意的一件有趣的事情是,“times”数组在merge.process调用之后被修改

>>> times
array([-8.07090609, -6.68461173, -5.29831737])
我使用的是OpenCV版本:

>>> cv2.__version__
'3.0.0'
Merge.process调用的签名如下:

>>> import inspect
>>> inspect.getdoc(merger.process)
'process(src, times, response[, dst]) -> dst  or  process(src, times[, dst]) -> dst'

我不知道Debevec算法是如何工作的,但我设法得到了一个你要求的工作示例。注意图像(及其对应的EV)和第5行上的乘法器的降序。使用乘法器,可以得到稍微不同的结果。不知道发生了什么事,但似乎起了作用。给你:

EV+4.09.JPGEV+1.18.JPGEV-1.82.JPG


OUT.JPG在维利米尔的回答帮助下,我设法让它工作起来。我的问题是,我必须按照EV的降序构建图像数组。虽然Velimir的答案满足了我的需要,但我将此作为一个单独的答案,因为我想强调,
时间
数组表示曝光时间,而不是EV。我还添加了色调映射方法,该方法应在构建辐射贴图后应用

import cv2
import numpy as np

img = cv2.imread("bright.jpg") # Exposure time 1/8
img2 = cv2.imread("normal.jpg") # Exposure time 1/13
img3 = cv2.imread("dark.jpg") # Exposure time 1/15

images = [img, img2, img3]
times = np.array([1/8.,1/13.,1/15.])
merger = cv2.createMergeDebevec()
hdr = merger.process(images, times)
tonemap = cv2.createTonemapDurand(2.2)
tonemapped_image = tonemap.process(hdr)
cv2.imwrite('tonemapped_image.jpg', tonemapped_image * 255)
示例图像来自

鲜明形象

正常图像

暗影

色调映射的结果图像

你介意分享你的1、2和3.jpg吗?这是为了再现错误。或者你曾尝试过其他JPG,但产生了相同的结果?此外,我似乎找不到cv2版本3与我的PyCharmYeah我尝试了两套不同的图像。如果我能让它与任何一组图像一起工作,我会很满意。
import cv2
import numpy as np
images = [cv2.imread(x) for x in 'EV+4.09.JPG', 'EV+1.18.JPG', 'EV-1.82.JPG']
times = np.array([4.09, 1.18, -1.82])
times *= 1000.
merger = cv2.createMergeDebevec()
hdr = merger.process(images, times)
print hdr
cv2.imwrite('out.jpg', hdr)
import cv2
import numpy as np

img = cv2.imread("bright.jpg") # Exposure time 1/8
img2 = cv2.imread("normal.jpg") # Exposure time 1/13
img3 = cv2.imread("dark.jpg") # Exposure time 1/15

images = [img, img2, img3]
times = np.array([1/8.,1/13.,1/15.])
merger = cv2.createMergeDebevec()
hdr = merger.process(images, times)
tonemap = cv2.createTonemapDurand(2.2)
tonemapped_image = tonemap.process(hdr)
cv2.imwrite('tonemapped_image.jpg', tonemapped_image * 255)