UE4 4.24及4.25版本OpenCV配置(插件文件+教程)
实验室项目做UE4仿真,需要用OpenCV做摄像头接入和图像处理,跟着网上各种教程踩了一上午的坑终于搞定了,特此记录一下。提示:一、 博主使用的UE版本为4.24和4.25,其他版本不保证有效(印象中网上有更老一些,如4.20版本的教程)。二、使用的Plugin包非博主制作,原项目可在Github找到。三、!!重要:操作过程中存在使项目崩溃无法打开的风险,建议提前对项目进行备份!!(UE4老特色了
实验室项目做UE4仿真,需要用OpenCV做摄像头接入和图像处理,跟着网上各种教程踩了一上午的坑终于搞定了,特此记录一下。
提示:
一、 博主使用的UE版本为4.24和4.25,其他版本不保证有效(印象中网上有更老一些,如4.20版本的教程)。
二、使用的Plugin包非博主制作,原项目可在Github找到。
三、!!重要:操作过程中存在使项目崩溃无法打开的风险,建议提前对项目进行备份!!(UE4老特色了)
Step 1:新建项目(已有项目的建议备份原项目),新建一个继承Actor的C++类用于测试。
Step 2:关闭UE,把OpenCV-Plugin文件夹中的内容直接复制到项目文件夹下(不要复制到plugins文件夹)。
插件下载链接:https://pan.baidu.com/s/1wj7K3joPKulnqjghhv0hfQ 提取码5enr
用VS打开项目sln文件,右键,重新生成。
此时可能会有报错:
错误:Expected OpenCV.h to be first header included.
解决:将[项目文件夹]/Plugins/OpenCV/Source/OpenCV/Private/OpenCV.cpp中的 #include “OpenCVPrivatePCH.h” 改为 #include “../Public/OpenCV.h”
错误:ModuleManager.h No such file or directory
解决:将[项目文件夹]/Plugins/OpenCV/Source/OpenCV/Public/OpenCV.h中的 #include “ModuleManager.h” 改为 #include “Modules/ModuleManager.h”
如果有其他错误可以重试几次。
(博主推测这些问题可能是因为这个插件对应的UE版本比较旧,大家也可以直接在插件原文件夹中改对应文件,以后就不用每次配置都重复一遍了)
Step3:打开UE,在编辑->插件中拉到最下,OpenCV插件勾选Enabled,重启UE。
如果重启时弹框提示需要重新构建,说明上一步未成功,回到VS重新生成项目。
Step4:打开[项目文件夹]/Source/[项目名]/[项目名].build.cs,做以下修改:
// 在using UnrealBuildTool后添加:
using System.IO;
//在构造函数前添加:
private string ThirdPartyPath
{
get { return Path.GetFullPath(Path.Combine(ModuleDirectory, "../../ThirdParty/")); }
}
//在PrivateDependencyModuleNames.AddRange和下面的注释段之间添加:
string OpenCVPath = Path.Combine(ThirdPartyPath, "OpenCV/");
PublicIncludePaths.AddRange(new string[] { Path.Combine(OpenCVPath, "Includes") });
PublicLibraryPaths.Add(Path.Combine(OpenCVPath, "Libraries/Win64"));
bEnableUndefinedIdentifierWarnings = false; // UE4默认会把一些警告当作编译错误处理,需要禁用
Step5:此时OpenCV在UE中已导入完成,但在VS中include头文件时会不识别。解决方法:右键项目->属性->VC++目录 在包含目录中添加路径:[项目文件夹]/ThirdParty/OpenCV/Includes。
Step6:测试。在cpp文件中:
// 链接到lib,也可以在项目设置中完成
#ifdef _DEBUG
#pragma comment(lib,"opencv_world320d.lib")
#else
#pragma comment(lib,"opencv_world320.lib")
#endif
#include "opencv2/opencv.hpp"
using namespace cv;
void AMyActor::BeginPlay()
{
Super::BeginPlay();
Mat mat = Mat::zeros(1, 2, CV_8UC1);
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::Printf(TEXT("Height of mat is %d"), mat.cols));
}
VS中有代码提示且UE4编译不报错即为成功。将MyActor拖到场景中,运行会输出:
然后可以开始愉快地使用OpenCV啦~
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)