This commit is contained in:
hmi2362802002
2025-10-11 21:12:10 +08:00
8 changed files with 52 additions and 24 deletions
Binary file not shown.
Binary file not shown.
@@ -19,6 +19,8 @@ public class NeoKinectUnreal : ModuleRules
{ {
"Core", "Core",
"CoreUObject", "CoreUObject",
"OpenCV",
"OpenCVHelper"
// ... add other public dependencies that you statically link with here ... // ... add other public dependencies that you statically link with here ...
}); });
@@ -34,13 +36,14 @@ public class NeoKinectUnreal : ModuleRules
string neoKinectPath = Path.Combine(thirdPartyPath, "NeoKinect"); string neoKinectPath = Path.Combine(thirdPartyPath, "NeoKinect");
string kinectPath = Path.Combine(thirdPartyPath, "Kinect"); string kinectPath = Path.Combine(thirdPartyPath, "Kinect");
//string openCVPath = Path.Combine(thirdPartyPath, "OpenCV");
PublicSystemLibraryPaths.Add(Path.Combine(neoKinectPath, "Lib")); PublicSystemLibraryPaths.Add(Path.Combine(neoKinectPath, "Lib"));
PublicIncludePaths.Add(Path.Combine(neoKinectPath, "Inc")); PublicIncludePaths.Add(Path.Combine(neoKinectPath, "Inc"));
PublicSystemLibraryPaths.Add(Path.Combine(kinectPath, "Lib")); PublicSystemLibraryPaths.Add(Path.Combine(kinectPath, "Lib"));
PublicIncludePaths.Add(Path.Combine(kinectPath, "Inc")); PublicIncludePaths.Add(Path.Combine(kinectPath, "Inc"));
const string FaceLibraryName = "Kinect20.Face"; const string FaceLibraryName = "Kinect20.Face";
// Add static libraries // Add static libraries
PublicSystemLibraries.AddRange(new[] PublicSystemLibraries.AddRange(new[]
@@ -48,14 +51,14 @@ public class NeoKinectUnreal : ModuleRules
"NeoKinect.lib", "NeoKinect.lib",
"Kinect20.lib", "Kinect20.lib",
FaceLibraryName + ".lib" FaceLibraryName + ".lib"
}); });
// Add dynamic libraries // Add dynamic libraries
const string KinectFaceDllName = FaceLibraryName + ".dll"; const string KinectFaceDllName = FaceLibraryName + ".dll";
PublicDelayLoadDLLs.AddRange(new[] PublicDelayLoadDLLs.AddRange(new[]
{ {
KinectFaceDllName KinectFaceDllName
}); });
// Define library name for code to be able to check for its presence // Define library name for code to be able to check for its presence
PrivateDefinitions.Add("KINECT_FACE_DLL_NAME=\"" + KinectFaceDllName + "\""); PrivateDefinitions.Add("KINECT_FACE_DLL_NAME=\"" + KinectFaceDllName + "\"");
@@ -64,5 +67,6 @@ public class NeoKinectUnreal : ModuleRules
const string ProjectDLLDir = "$(ProjectDir)/Binaries/Win64"; const string ProjectDLLDir = "$(ProjectDir)/Binaries/Win64";
RuntimeDependencies.Add(Path.Combine(ProjectDLLDir, KinectFaceDllName)); RuntimeDependencies.Add(Path.Combine(ProjectDLLDir, KinectFaceDllName));
RuntimeDependencies.Add(Path.Combine(ProjectDLLDir, "NuiDatabase/..."), StagedFileType.NonUFS); RuntimeDependencies.Add(Path.Combine(ProjectDLLDir, "NuiDatabase/..."), StagedFileType.NonUFS);
}
}
} }
@@ -12,7 +12,9 @@
#include "Engine/TextureRenderTarget2D.h" #include "Engine/TextureRenderTarget2D.h"
#include "HAL/PlatformProcess.h" #include "HAL/PlatformProcess.h"
#include "UObject/Package.h" #include "UObject/Package.h"
#include "PreOpenCVHeaders.h"
#include "opencv2/opencv.hpp"
#include "PostOpenCVHeaders.h"
using namespace NeoKinect; using namespace NeoKinect;
//~ STRUCTS METHODS //~ STRUCTS METHODS
@@ -74,7 +76,6 @@ FFrameTextureData UNeoKinectManager::FramesData[static_cast<int32>(EKinectFrame:
UNeoKinectManager* UNeoKinectManager::EventsDispatcher = nullptr; UNeoKinectManager* UNeoKinectManager::EventsDispatcher = nullptr;
FTSTicker::FDelegateHandle UNeoKinectManager::TickerHandle; FTSTicker::FDelegateHandle UNeoKinectManager::TickerHandle;
#pragma endregion Statics #pragma endregion Statics
//~ INITIALIZATION / UNINITIALIZATION //~ INITIALIZATION / UNINITIALIZATION
@@ -238,6 +239,7 @@ void UNeoKinectManager::InitStatics()
fd.UFrameType = static_cast<EKinectFrame>(i); fd.UFrameType = static_cast<EKinectFrame>(i);
fd.BufferSize = fd.Width * fd.Height * fd.PixelSize; fd.BufferSize = fd.Width * fd.Height * fd.PixelSize;
} }
} }
#pragma endregion Initialization_Uninitialization #pragma endregion Initialization_Uninitialization
@@ -1140,13 +1142,36 @@ void UNeoKinectManager::UpdateFrames()
{ {
ThreadBuffer.Lock(); ThreadBuffer.Lock();
{ {
RHIUpdateTexture2D( if (FrameData.KFrameType == KinectFrameType::BodyIndex)
FrameData.Texture->GetRenderTargetResource()->GetRenderTargetTexture(), {
0, cv::Mat binaryImage(FrameData.Height, FrameData.Width, CV_8UC4);
FUpdateTextureRegion2D(0, 0, 0, 0, FrameData.Width, FrameData.Height), memcpy(binaryImage.data, Buffer, FrameData.Height * FrameData.Width * FrameData.PixelSize);
FrameData.Width * FrameData.PixelSize, cv::Mat processedImage;
Buffer cv::resize(binaryImage, processedImage, cv::Size(FrameData.Width / 2, FrameData.Height / 2), 0, 0, cv::INTER_CUBIC);
cv::Mat kernel = cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(5, 5));
cv::morphologyEx(processedImage, processedImage, cv::MORPH_OPEN, kernel); // 去噪
cv::morphologyEx(processedImage, processedImage, cv::MORPH_CLOSE, kernel); // 填充
cv::GaussianBlur(processedImage, processedImage, cv::Size(5, 5), 1.0);
cv::resize(processedImage, processedImage, cv::Size(FrameData.Width, FrameData.Height), 0, 0, cv::INTER_CUBIC);
RHIUpdateTexture2D(
FrameData.Texture->GetRenderTargetResource()->GetRenderTargetTexture(),
0,
FUpdateTextureRegion2D(0, 0, 0, 0, FrameData.Width, FrameData.Height),
FrameData.Width * FrameData.PixelSize,
processedImage.data
); );
}
else
{
RHIUpdateTexture2D(
FrameData.Texture->GetRenderTargetResource()->GetRenderTargetTexture(),
0,
FUpdateTextureRegion2D(0, 0, 0, 0, FrameData.Width, FrameData.Height),
FrameData.Width * FrameData.PixelSize,
Buffer
);
}
} }
ThreadBuffer.Unlock(); ThreadBuffer.Unlock();
} }
@@ -7,7 +7,6 @@
#include "NeoKinectEnums.h" #include "NeoKinectEnums.h"
#include "PixelFormat.h" #include "PixelFormat.h"
#include "Containers/Ticker.h" #include "Containers/Ticker.h"
#include "NeoKinectManager.generated.h" #include "NeoKinectManager.generated.h"
class FKinectThread; class FKinectThread;