将摄像头配置文件校正添加到dng_validate.exe [Adobe DNG SDK]



使用Lightroom我知道如何将相机配置文件( *.dcp文件(应用于我的 *.dng image。

我想在我正在编写的应用程序中执行相同的操作,所以我想一个很好的起点是将此功能附加到dng_validate.exe应用程序。

所以我开始添加:

#include "dng_camera_profile.h"

然后添加:

static dng_string gDumpDCP; 

并将以下内容添加到错误打印:

"-dcp <file>   Load camera profile from <file>.dcp"n"

然后,我添加了该功能以读取CLI的DCP:

else if (option.Matches("dcp", true))
{
   gDumpDCP.Clear();
   if (index + 1 < argc)
   {
      gDumpDCP.Set(argv[++index]);
   }
   if (gDumpDCP.IsEmpty() || gDumpDCP.StartsWith("-"))
   {
      fprintf(stderr, "*** Missing file name after -dcpn");
      return 1;
   }
   if (!gDumpDCP.EndsWith(".dcp"))
   {
      gDumpDCP.Append(".dcp");
   }
}

然后,我从磁盘[LINE 421]加载配置文件:

if (gDumpTIF.NotEmpty ())
{
   dng_camera_profile profile;
   if (gDumpDCP.NotEmpty())
   {
      dng_file_stream inStream(gDumpDCP.Get());
      profile.ParseExtended(inStream);
   }
   // Render final image.
   .... rest of code as it was

那么,我现在如何使用配置文件数据纠正渲染并编写更正的图像?

您需要使用 negative->AddProfile(profile);添加配置文件。

我的项目RAW2DNG执行此操作(以及更多(,如果您想查看示例,可以在源中使用。该配置文件在此处添加。

因此,在玩了几天后,我现在找到了解决方案。实际上,负面可以具有多个摄像头配置文件。因此,使用negative->AddProfile(profile)您只需添加一个即可。但这不是第一个配置文件,这将不会使用!因此,我们首先需要清洁配置文件并添加一个。

AutoPtr<dng_camera_profile> profile(new dng_camera_profile);
if (gDumpDCP.NotEmpty())
{
    negative->ClearProfiles();
    dng_file_stream inStream(gDumpDCP.Get());
    profile->ParseExtended(inStream);
    profile->SetWasReadFromDNG();
    negative->AddProfile(profile);
    printf("Profile count: "%d"n", negative->ProfileCount()); // will be 1 now!
}

接下来正确获取图像的事情就是拥有正确的白平衡。这可以在相机或之后完成。对于我使用4个不同摄像机的应用,当使用后来白平衡校正时,结果是最好的。因此,我发现了使用Lightroom的4个(温度,色调(。

问题是如何在dng_validate.exe程序中添加这些值。我这样做了:

#include "dng_temperature.h"

if (gTemp != NULL && gTint != NULL)
{
    dng_temperature temperature(gTemp, gTint);
    render.SetWhiteXY(temperature.Get_xy_coord());
}

产生的图像与Lightroom结果略有不同,但足够接近。同样,相机到相机差异现在已经消失了!:(

相关内容

  • 没有找到相关文章

最新更新