经过多次尝试翻看了多位大佬们的博客后,终于在UE4.27中成功运行了OpenCV插件,并获取到了本地相机画面,非常感谢各位前辈的帮助。
1.创建UE4.27工程
创建时选择C++项目。
创建完毕后关闭项目和自动打开的VS即可。
2. 下载OpenCV
OpenCV百度网盘链接:
链接:https://pan.baidu.com/s/1HkrmQHhaP__CMpBoYFZnsA?pwd=vzmm
提取码:vzmm
解压后将三个文件夹放入创建的工程的根目录下。
右键uproject文件,生成VS工程文件。
3. 修改OpenCV代码
打开sln文件后,修改ProjectName.Build.cs内容。
添加第2行、第6-9行、第25-27行。
using UnrealBuildTool;
using System.IO;
public class TestWebcam : ModuleRules
{
private string ThirdPartyPath
{
get{return Path.GetFullPath(Path.Combine(ModuleDirectory,"../../ThirdParty"));}
}
public TestWebcam(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore","OpenCV"});
PrivateDependencyModuleNames.AddRange(new string[] { });
// Uncomment if you are using Slate UI
// PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
// Uncomment if you are using online features
// PrivateDependencyModuleNames.Add("OnlineSubsystem");
// To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
string OpenCVPath = Path.Combine(ThirdPartyPath, "OpenCV/");
PublicIncludePaths.AddRange(new string[] { Path.Combine(OpenCVPath, "Includes") });
PublicLibraryPaths.Add(Path.Combine(OpenCVPath, "Libraries/Win64"));
}
}
修改完毕后右键项目工程点击“生成”,编译成功即可。
4. 在项目中启用插件
5.创建M_WebCam材质。
打开材质后右键创建Param2D。
将名称改为Video Texture。 注意这个名称是后续在蓝图中调用使用的,之前的博主们可能这里都写错了,跟蓝图中使用的不一致,疑惑了很久到底是怎么一个变量
将RGB与自发光颜色连接。
将材质按下图设置即可
6.创建BP_Webcam蓝图
创建基于WebcamReader的蓝图。
打开蓝图后按如下图写入。
注意添加平面组件Plane,添加Dynamic Material变量,变量为材质动态实例。
注意此处的Video Texture是上一节中自定义的名称。
7.将蓝图拖入地图中运行
关于截图也研究了很久,目前使用的是将一个相机架在平面前,全覆盖并使用“游戏进程自动截图”截全屏,有时间会再写一下。