草庐IT

UE4 UE5 opencv插件 获取摄像头画面

东风吹柳 2023-04-04 原文

本插件在UE4.26、UE4.27、UE5.0.3等版本亲测有效,谢谢各位前辈朋友,这里就不一一鸣谢了。

插件地址:UE5OpenCV插件-C++文档类资源-CSDN下载

1.项目配置

下载后解压到工程插件目录下

拷贝OpenCV455\Source\ThirdParty\OpenCV455Library\bin的opencv_world455.dll到工程根目录的Binaries\Win64目录下(打包也需做同样操作)

注意:UE5OpenCV插件-C++文档类资源-CSDN下载

上述插件不需要做以下2~4步骤,插件里面我已经做了相应处理。步骤2~4仅仅针对自己想要封装其他OpenCV版本插件的同仁参考,描述内容也是参照网上其他插件资源结构。

2.修改ProjectName.Build.cs

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"));
	}
}

3.修改OpenCV.Build.cs

// 以下内容在封装的插件中已经配置好了,无需重新修改

using UnrealBuildTool;
using System.IO;

public class OpenCV : ModuleRules
{
    private string ThirdPartyPath
    {
        get { return Path.GetFullPath(Path.Combine(ModuleDirectory, "../../../../ThirdParty/")); }
    }

	//public OpenCV(TargetInfo Target)
	public OpenCV(ReadOnlyTargetRules Target) : base(Target)
	{
        // Startard Module Dependencies
		PublicDependencyModuleNames.AddRange(new string[] { "Core", "RHI", "RenderCore" });
		PrivateDependencyModuleNames.AddRange(new string[] { "CoreUObject", "Engine", "Slate", "SlateCore" });

        // Start OpenCV linking here!
        bool isLibrarySupported = false;

        // Create OpenCV Path 
        string OpenCVPath = Path.Combine(ThirdPartyPath, "OpenCV");

        // Get Library Path 
        string LibPath = "";
        bool isdebug = Target.Configuration == UnrealTargetConfiguration.Debug && BuildConfiguration.bDebugBuildsActuallyUseDebugCRT;
        if (Target.Platform == UnrealTargetPlatform.Win64)
        {
            LibPath = Path.Combine(OpenCVPath, "Libraries", "Win64");
            isLibrarySupported = true;
        }
        else if (Target.Platform == UnrealTargetPlatform.Win32)
        {
            // TODO: add OpenCV binaries for Win32
        }
        else if (Target.Platform == UnrealTargetPlatform.Mac)
        {
            // TODO: add OpenCV binaries for Mac
        }
        else if (Target.Platform == UnrealTargetPlatform.Linux)
        {
            // TODO: add OpenCV binaries for Linux
        }
        else
        {
            string Err = string.Format("{0} dedicated server is made to depend on {1}. We want to avoid this, please correct module dependencies.", Target.Platform.ToString(), this.ToString()); System.Console.WriteLine(Err);
        }

        if (isLibrarySupported)
        {
            //Add Include path 
            PublicIncludePaths.AddRange(new string[] { Path.Combine(OpenCVPath, "Includes") });

            // Add Library Path 
            PublicLibraryPaths.Add(LibPath);

            //Add Static Libraries
            PublicAdditionalLibraries.Add("opencv_world320.lib");

            //Add Dynamic Libraries
            PublicDelayLoadDLLs.Add("opencv_world320.dll");
            PublicDelayLoadDLLs.Add("opencv_ffmpeg320_64.dll");

        }

        Definitions.Add(string.Format("WITH_OPENCV_BINDING={0}", isLibrarySupported ? 1 : 0));
	}
}

4.修改OpenCV.cpp和OpenCV.h

// 以下内容在封装的插件中已经配置好了,无需重新修改
//.cpp
//#include "OpenCVPrivatePCH.h"
#include "../Public/OpenCV.h"


//.h
//#include "ModuleManager.h"
#include "Modules/ModuleManager.h"

5.编译插件源码

右键工程文件生成VS解决方案。UE项目需要是带有Cpp文件的工程,具体就是要么UE工程是Cpp的,或者在蓝图工程里新建一个Cpp类。

双击打开生成的.sln,右键项目工程选择“生成”,比如下图的TestOpenCV501,编译成功即可。

6.UE5使用示例

在UE5中打开插件

 创建webcam reader蓝图类和材质

将BP_WebCam放到level里,运行效果如下:

​ 各位尽情享用,如有问题,请评论区回复。 

有关UE4 UE5 opencv插件 获取摄像头画面的更多相关文章

  1. UE4 源码阅读:从引擎启动到Receive Begin Play - 2

    一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame

  2. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  3. 萤石开放平台——怎么通过API接口远程添加摄像头? - 2

    高科技摄像头特别是海康萤石摄像头,已经不再只局限于简单的视频功能,特别是智能AI的普及,摄像头也华丽变身成了一个个独立的智能个体,可以实现人脸抓拍,人形检测,客流统计等店铺值守场景,也可以实现安全帽识别,车辆识别,非法入侵识别等智慧工地场景。但用户也许会问,摄像头又不会说话,他得知的这些信息怎么告诉我们,还是说需要配一个主机去处理,这成本又有点太高了。这点正是萤石云要为大家解决的,下面来介绍下如何让设备更简便智能的说话。API(应用程序编程接口)提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力。形象一点API可以理解为一个管道,通过该管道,可以传入约定好的命令,来获得摄像头的反馈,

  4. javascript - 使用网络摄像头捕捉图像 - 2

    我正在使用Asp.netMVC4开发一个项目。我需要用网络摄像头拍照。此应用程序应该可以配置为任何平板电脑。目前在台式机上运行该应用程序,在平板电脑上没有。我正在使用jscam.swf和jscam_canvas_only.swf。在平板电脑上,我在这些设备上使用SamsungGalaxy安装adobeflashplayer无法正常工作...有人知道其他一些拍照技术,或者如果有人可以帮助我解决这个问题,我将不胜感激 最佳答案 Flash在Android平板电脑上的支持有限,在iOS设备上不支持。更好的解决方案可能是转向100%HTML

  5. javascript - WebRTC/getUserMedia API 教程 - 多个摄像头 - 2

    有谁知道可以让两个用户通过网络摄像头相互连接的WebRTC/getUserMediaAPI脚本的好教程?一个恰当的例子应该是Chatroulette,只是它不需要那么大。并且应该可以在本地主机上创建它。希望有人能帮帮我! 最佳答案 使用SimpleWebRTC与Signallingserver实现你的目标。在mainsite找到更多信息您将需要nodejs来运行信令服务器,或者您可以使用simplewebrtcsignallingserver用于测试目的。虽然屏幕共享仅适用于HTTPS。工作DEMOSimpleWebRTCDemoS

  6. UE4/UE5 打包发布与补丁 - 2

    目录必要说明:一、准备二、项目1.打开插件2.添加模块到xxx(项目名字).Build.cs文件3.创建GameInstance(C++类)4.创建和配置蓝图文件4.1.创建蓝图Gameinstance并继承MyGameInstance4.2.配置下载文件块4.3.创建GameMode(蓝图即可) 4.4.创建一个空白的关卡5.创建DataAsset6.项目设置 6.1DefaultGame.ini6.2ProjectSetting7.项目打包设置三、服务器1.安装Web服务器2.配置Web服务器2.1.打开服务器2.2.选择刚刚创建的服务器2.3.选择MIME类型2.4.在右侧空白的地方:右

  7. javascript - 水平翻转 .​​getUserMedia 的网络摄像头图像流 - 2

    所以我一直在搞乱这个页面:https://tutorialzine.github.io/pwa-photobooth/基本上它的作用是激活您的网络摄像头并让您直接从流中拍摄快照,我为我的网络借用了它,但视频流被翻转了,我想镜像视频流以便感觉更好。注意:我是一个js新手,所以欢迎详细解释。这是代码,您可能必须使用Firefox而不是Chrome:$('.closecam').click(function(){$('.webcam__overlay').hide();}); $('.camera').click(function(){$('.webcam__overlay').show()

  8. opencv 边缘检测 cv2.Canny()详解 - 2

    👨‍💻个人简介:深度学习图像领域工作者🎉总结链接:            链接中主要是个人工作的总结,每个链接都是一些常用demo,代码直接复制运行即可。包括:                    📌1.工作中常用深度学习脚本                    📌2.torch、numpy等常用函数详解                    📌3.opencv图片、视频等操作                    📌4.个人工作中的项目总结(纯干活)              链接:https://blog.csdn.net/qq_28949847/article/details/128

  9. opencv(12):cv::rectangle学习与代码演示,使用opencv画矩形/矩形框 - 2

    1cv::rectangle介绍1.1功能:        绘制一个简单的、粗的或填充的直角矩形或直角矩形框。1.2c++代码形式rectangle()[1/2]#includevoidcv::rectangle ( InputOutputArray img, Point pt1, Point pt2, constScalar& color, int thickness=1, int lineType=LINE_8, int shift=0 ) img  图像。pt1     矩形的顶点。pt2     与pt1相对的矩形的顶点。意思是pt1和pt2是对角顶点color  颜色或亮

  10. javascript - 如何使对象在 three.js 场景中仅对一个摄像机可见 - 2

    我使用three.js创建了一个用于3D场景的嵌入式轨迹球相机Controller。目前,这使用一个小立方体、一个圆和一个放置在世界原点的正交相机。然而,这三个对象在场景本身中仍然可见,如通过主摄像机所见。(在我下面的演示代码中,我特意将立方体设为10x10x10,以便清晰可见,但它可以做得更小。)此外,作为主场景一部分的穿过原点的元素在插图中可见。例如:插图中可以看到属于主场景的AxisHelper。是否可以在three.js/webgl中使某些对象仅对某些相机可见?如果没有,那么一个解决方法是将轨迹球功能所需的对象放置在远离深空的地方,主摄像头看不到它们,但如果可能的话我更喜欢更纯

随机推荐