实验室项目做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啦~

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐