Intel® Open Image Denoise c++


#pragma once
#include <oidn.h>
#include <iostream>
#pragma comment(lib, "OpenImageDenoise.lib")
#pragma comment(lib, "OpenImageDenoise_core.lib")

OIDNFilter filter;
OIDNDevice device = oidnNewDevice(OIDN_DEVICE_TYPE_DEFAULT); // CPU or GPU if available
OIDNBuffer colorBuf, albedoBuf, normalBuf;
extern "C" __declspec(dllexport) void Init(int width, int height)
{
    oidnCommitDevice(device);
    colorBuf = oidnNewBuffer(device, width * height * 3 * sizeof(float));
    albedoBuf = oidnNewBuffer(device, width * height * 3 * sizeof(float));
    normalBuf = oidnNewBuffer(device, width * height * 3 * sizeof(float));
    filter = oidnNewFilter(device, "RT");

    oidnSetFilterImage(filter, "color", colorBuf,
        OIDN_FORMAT_FLOAT3, width, height, 0, 0, 0); // beauty
    oidnSetFilterImage(filter, "albedo", albedoBuf,
        OIDN_FORMAT_FLOAT3, width, height, 0, 0, 0); // auxiliary
    oidnSetFilterImage(filter, "normal", normalBuf,
        OIDN_FORMAT_FLOAT3, width, height, 0, 0, 0); // auxiliary
    oidnSetFilterImage(filter, "output", colorBuf,
        OIDN_FORMAT_FLOAT3, width, height, 0, 0, 0); // denoised beauty
    oidnSetFilterBool(filter, "hdr", true); // beauty image is HDR
    oidnCommitFilter(filter);
}
extern "C" __declspec(dllexport) void Denoise(float* color, float* albedo, float* normal, int width, int height)
{
	//拷贝color、albedo、normal到oidn缓存
    oidnWriteBuffer(colorBuf, 0, width * height * 3 * sizeof(float), color);
    oidnWriteBuffer(albedoBuf, 0, width * height * 3 * sizeof(float), albedo);
    oidnWriteBuffer(normalBuf, 0, width * height * 3 * sizeof(float), normal);
    //执行降噪
    oidnExecuteFilter(filter);
	//将降噪结果拷贝到color数组
    oidnReadBuffer(colorBuf, 0, width * height * 3 * sizeof(float), color);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值