我目前卡在图片上的视频节目中.
问题:
我正在从UE4中提取图片,由于存在错误,在渲染截图期间并未考虑所有灯光.输出是HDR图像.我希望得到更好的亮度,因为导出的图像非常暗,就像第一次曝光一样.
使用UE4中的"曝光偏差"参数,我能够真实地获得场景的亮度,但不能将此参数应用于屏幕截图渲染:
尝试:
使用Tonemapper算法(特定cv::TonemapDrago
)我能够获得更好的图像结果:
对于我的情况,Tonemap算法的主要问题是因为全局亮度根据区域的亮度而改变:在第二个图像中,窗口增加了大量的光,因此算法降低了所有亮度以调整平均值.在渲染的视频中,光线变化非常残酷.
我试图改变亮度和饱和度而没有成功.我已经修改了TonemapDrago
尝试使用常量的代码来执行算法的某些步骤.
题 :
我想从HDR图像中"选择曝光时间".Tonemap基于同一图像的几个曝光时间,在我的情况下并不有趣.
欢迎任何其他想法.
编辑:
CV :: Mat深度为5,类型为CV_32FC3
cout << mat.step
给我19200
以下是我用来尝试解决问题的2个示例:
编辑2:
无法用gimp打开.HDR图片,带有"explosure blend"插件的事件.我可以使用Photoshop获得足够的结果.那背后的算法有什么想法吗?OpenCV的6个Tonemap算法中的任何一个允许选择曝光校正.
编辑3:
我已经按照这个tuto中的算法解释了openGL,它给了我这个C +代码:
cv::Mat exposureTonemap (cv::Mat m, float gamma = 2.2, float exposure = 1)
{
// Exposure tone mapping
cv::Mat exp;
cv::exp( (-m) * exposure, exp );
cv::Mat mapped = cv::Vec3f(1.0) - exp;
// Gamma correction
cv::pow(exp, 1.0f / gamma, exp);
cv::imshow("exposure …
Run Code Online (Sandbox Code Playgroud) 是否存在完全支持 HDR 图像的网络图像格式?10/12位通道、DCI-P3/Rec.2020色彩空间等
似乎没有一种传统格式支持它,也没有人在谈论它,即使 YouTube 接受 HDR 上传并且 HDR 显示器的采用率正在增加。
在 Windows 11 中使用启用 HDR 的显示器时,我们可以使用“设置”>“系统”>“显示”>“HDR”中的“SDR 内容亮度”滑块来控制屏幕上常规非 HDR 元素的亮度。
例如,如果显示器的最大亮度为 400nit,并且滑块设置为 60%,则 SDR 内容将以 240nit 的亮度显示。
Windows 10 也有类似的东西。
我希望能够以编程方式更改滑块的值,这样我就可以在白天拥有更亮的桌面,在晚上拥有更暗的桌面。
通过 WMI 或 DDC/CI 更改亮度的“旧”方法不适用于启用 HDR 的显示器。
我使用 ProcessMonitor 来查看滑块的作用,但它生成了太多条目,而且我能看到的唯一相关位是它更改了注册表项Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\MonitorDataStore\DELA1E4#G7IYMxgwAAgX_10_07E6_A1\SDRWhiteLevel
。
在我的显示屏上,该值以 12 月形式从 1000 (0%) 到 3500 (50%) 到 6000 (100%),其中 1000 等于 80nit。
一旦 SystemSettings.exe 更改了注册表值,它就会调用 D3D12 中的某些内容来实际应用更改。
翻阅微软关于Win32 API的文档,我找不到任何相关信息。
有人知道如何让它工作吗?任何语言都可以,PowerShell、C#、C++、Python...
谢谢。
我想用AVFoundation和/或CoreImage同时获得实时和后处理的HDR效果.我假设一旦捕获全帧静止图像,使用CoreImage相对容易,但有人知道如何使用AVCaptureVideoPreviewLayer实现类似HDR的效果吗?
我正在将我的 webgl 延迟渲染器转换为使用高动态范围的渲染器。我从网上的各种来源阅读了很多有关该主题的内容,并且有一些问题希望能够得到澄清。我完成的大部分阅读内容都涉及 HDR 图像渲染,但我的问题与渲染器可能需要如何更改才能支持 HDR 相关。
据我了解,HDR 本质上是试图捕捉更高的光线范围,以便我们可以在极亮或黑暗的场景中看到细节。通常在游戏中,我们使用强度 1 表示白光,使用强度 0 表示黑色。但在 HDR/现实世界中,范围要多样化得多。也就是说,引擎中的太阳可能比灯泡亮 10000 倍。
为了应对这些更大的范围,您必须将渲染器转换为使用浮点渲染目标(或者理想情况下是半浮点,因为它们使用更少的内存)进行光通道。
我的第一个问题是关于照明。除了浮点渲染目标之外,这是否仅仅意味着如果以前我有一个代表太阳的光,其强度为 1,那么它现在可以/应该表示为 10000?IE
float spec = calcSpec();
vec4 diff = texture2D( sampler, uv );
vec4 color = diff * max(0.0, dot( N, L )) * lightIntensity + spec; //Where lightIntensity is now 10000?
return color;
Run Code Online (Sandbox Code Playgroud)
照明系统是否还有其他根本性变化(除了浮动纹理和更高的范围)?
接下来,我们现在有了一个浮动渲染目标,它已经累加了所有灯光值(在如上所述的较高范围内)。此时,我可能会使用诸如Bloom之类的东西对渲染目标进行一些后期处理。完成后,现在需要对其进行色调映射,然后才能将其发送到屏幕。这是因为光线范围必须转换回我们显示器的范围。
因此,对于色调映射阶段,我可能会使用后期处理,然后使用色调映射公式将 HDR 光照转换为低动态范围。我选择的技术是《神秘海域 2》中的 John Hables:
const float A = 0.15;
const float B = 0.50;
const float C = 0.10;
const float D = 0.20; …
Run Code Online (Sandbox Code Playgroud) 我想创建一个脚本,它接受一个.HDR
文件并将其色调映射到.JPG
. 我看过一些OpenCV 教程,似乎应该能够做到这一点。
我写了这个脚本:
import cv2
import numpy as np
filename = "image/gg.hdr"
im = cv2.imread(filename)
cv2.imshow('', im.astype(np.uint8))
cv2.waitKey(0)
tonemapDurand = cv2.createTonemapDurand(2.2)
ldrDurand = tonemapDurand.process(im.copy())
new_filename = filename + ".jpg"
im2_8bit = np.clip(ldrDurand * 255, 0, 255).astype('uint8')
cv2.imwrite(new_filename, ldrDurand)
cv2.imshow('', ldrDurand.astype(np.uint8))
Run Code Online (Sandbox Code Playgroud)
根据教程应该可以工作。不过,我最终得到了一个黑色图像。我已经验证它保存的结果是.JPG
,以及输入图像(1.6 兆像素 HDR 环境图)是一个有效的.HDR
.
OpenCV 应该能够.HDR
根据文档加载s 。
我试过复制链接的教程并且工作正常,所以问题出在.HDR
图像上,有人知道该怎么做吗?
谢谢
编辑:我使用了这个 HDR 图像。由于版权等原因,提供链接而不是直接下载。
我正在做一个 android 应用程序来解压缩、解码和显示 HDR 图片。
这些 HDR 图片的每个组件(A、R、G、B)使用 2 个字节,因此一个像素由 8 个字节的值表示,该值只能适合 long 类型。
我正在使用 android 的 Bitmap 来显示图片,因为它们有一个构造函数,允许使用Bitmap.Config.RGBA_F16
以下方法进行 HDR :
int width = 1;
int height = 1;
Bitmap image = Bitmap.createBitmap(width, height, Bitmap.Config.RGBA_F16);
Run Code Online (Sandbox Code Playgroud)
不幸的是,我找不到任何方法来填充位图的像素。我使用了推荐的公式,但它不能用在 Bitmap 的 setPixel(x,y,color) 方法中,因为颜色必须是一个整数:
long color = (A & 0xffff) << 48 | (B & 0xffff) << 32 | (G & 0xffff) << 16 | (R & 0xffff);
image.setPixel(0,0,color); //Argument type error
Run Code Online (Sandbox Code Playgroud)
.
我也尝试过使用 Color(它具有 HDR 兼容方法)、Paint 和 Canvas,但没有 Bitmap …
我正在尝试使用我的 LG OLED 电视的 ffmpeg 和 VAAPI 硬件加速将 4K HEVC HDR 视频转码为较低的比特率。
我使用以下文件: 视频
使用以下命令:
ffmpeg -init_hw_device vaapi=va:/dev/dri/renderD128 -hwaccel vaapi -hwaccel_output_format vaapi -hwaccel_device va -filter_hw_device va -i LG\ 4K\ HDR\ Demo\ -\ Daylight.mkv -map 0:0 -t 00:00:20 -c:v hevc_vaapi -sei hdr -qp:v 21 lg_vaapi.mkv
Run Code Online (Sandbox Code Playgroud)
但是这个文件在我的电视上没有被识别为 HDR。
使用 libx265 编码器(当然慢得多)时,它工作正常:
ffmpeg -i LG\ 4K\ HDR\ Demo\ -\ Daylight.mkv -t 00:00:20 -map 0:0 -c:v libx265 -preset medium -crf 18 -x265-params "colorprim=bt2020:colormatrix=bt2020nc:transfer=smpte2084:colormatrix=bt2020nc:hdr=1:info=1:repeat-headers=1:master-display=G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(11000000,40)" lg_libx265.mkv
Run Code Online (Sandbox Code Playgroud)
比较两个文件上 mediainfo 的输出时,我可以看到没有为视频轨道设置以下属性:
vaapi 编码的媒体信息:
General
Unique …
Run Code Online (Sandbox Code Playgroud) 我使用AVFoundation
框架来创建自定义相机应用程序.
是否有可能使用HDR拍摄自定义相机应用程序的照片,即HDR在相机API中暴露的某处?
是否可以在 JavaScript 中检测浏览器的显示器是否支持 HDR?
当访问者使用 HDR 显示器时,我需要在网页上显示 HDR 证书,但我已向客户表示这可能是不可能的。我们已经能够嵌入支持 HDR 的视频,并且可以在 Windows 版 Chrome 上正确播放。
到目前为止,在我的研究中,我没有发现检测这种能力的方法。
我发现的最接近的是Screen.colorDepth API