UE4.27 使用蓝图实现RGB与掩码图像采集
创作时间:
作者:
@小白创作中心
UE4.27 使用蓝图实现RGB与掩码图像采集
引用
CSDN
1.
https://blog.csdn.net/qq_41822101/article/details/140022863
最近需要使用虚幻引擎制作虚拟目标检测数据集,要求同时生成rgb图像与mask图像,从而进一步实现图像自动打标,解放双手。
本文提供一种**蓝图配合C++**实现rgb与mask图像采集的方法。我使用的是UE4.27,应该支持UE5。
效果
- rgb图像
- mask图像
0. 基本思路
使用蓝图与C++实现功能。
- 蓝图部分:使用
场景捕获2D
组件将画面渲染至
渲染目标 - C++部分:将
渲染目标
保存至本地图片
1. 蓝图实现
1.1 蓝图类创建
创建catcher蓝图类继承Actor。为了实现功能的易用性我设计了一些额外的组件与变量,来丰富功能。
组件
组件包括1个
摄像机组件
和2个
场景捕获2D
组件。
CineCamera
用于显示预览画面和视场便于拍摄;
RGB_SceneCaptureComponent2D
用于捕捉RGB画面;
MASK_SceneCaptureComponent2D
用于捕捉MASK画面。
变量
变量部分,字符串
time
与整数
imgCount
用于图像文件命名,
rgb_纹理目标
和
mask_纹理目标
作为公开变量便于从外部指定
渲染目标
对象。
1.2 蓝图实现
需要实现
构造函数
和2个事件:
开始运行
和
tick
构造函数
用于设置
场景捕获2D
组件的纹理目标。

是下面这个选项:

开始运行事件
用于同步摄像机与场景捕获的视场与获取当前时间设置字符串。



tick事件
用于保存每一帧图像到本地。
看一下细节:
使用
time
和
imgCount
合成文件名,使用
Save Render Target to JPG
函数将渲染好的纹理目标保存成JPG图像到本地。
Save Render Target to JPG
函数需要我们在C++中实现,这部分请看第2章。
2. C++实现
2.1 创建C++蓝图函数库类
2.2 编写保存图像函数
我的类命名为
imgSaver
,编写h与cpp如下:
- 头文件
// For copyright see LICENSE in EnvironmentProject root dir, or https:
#pragma once
#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "Engine/TextureRenderTarget2D.h"
#include "imgSaver.generated.h"
/**
*
*/
UCLASS()
class ENVIRONMENTPROJECT_API UimgSaver : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, Category = "Image Saving")
static void SaveRenderTargetToJPG(UTextureRenderTarget2D* RenderTarget, const FString& FilePath, int32 Quality = 100);
};
- 源文件
// For copyright see LICENSE in EnvironmentProject root dir, or https:
#include "imgSaver.h"
#include "IImageWrapper.h"
#include "IImageWrapperModule.h"
#include "ImageUtils.h"
#include "Misc/FileHelper.h"
#include "Engine/TextureRenderTarget2D.h"
void UimgSaver::SaveRenderTargetToJPG(UTextureRenderTarget2D* RenderTarget, const FString& FilePath, int32 Quality)
{
// 实现保存图片的代码
if (!RenderTarget)
{
// 打印错误信息
return;
}
FTextureRenderTargetResource* RenderTargetResource = RenderTarget->GameThread_GetRenderTargetResource();
FReadSurfaceDataFlags ReadSurfaceDataFlags;
ReadSurfaceDataFlags.SetLinearToGamma(false); // 我们处理的是线性颜色空间的数据
TArray<FColor> OutBMP;
if (RenderTargetResource->ReadPixels(OutBMP, ReadSurfaceDataFlags))
{
IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>(FName("ImageWrapper"));
TSharedPtr<IImageWrapper> ImageWrapper = ImageWrapperModule.CreateImageWrapper(EImageFormat::JPEG);
if (ImageWrapper.IsValid() && ImageWrapper->SetRaw(OutBMP.GetData(), OutBMP.GetAllocatedSize(), RenderTarget->SizeX, RenderTarget->SizeY, ERGBFormat::BGRA, 8))
{
auto JPEGData = ImageWrapper->GetCompressed(Quality);
FFileHelper::SaveArrayToFile(JPEGData, *FilePath);
}
}
}
2.3 编译项目
3. 使用catcher类
3.1 创建渲染目标
要创建RGB与MASK的
渲染目标
对象。
双击修改渲染目标属性,
尺寸X/Y
代表输出图像分辨率可以自由设置,
渲染目标格式
设置为
RTF RGBA8 SRGB
,
目标伽马
设置为
2.2
,如下:
3.2 catcher配置
将RGB与MASK的
渲染目标
对象设置为catcher的纹理目标。
设置MASK场景捕获组件,
仅显示actor
选择你需要生成掩码的模型actor
3.3 设置采图视场
可通过调整摄像机组件的
焦距
实现,预览图像即最终保存图片视场。
设置完成后
运行
即可保存rgb与mask图像到本地。
热门推荐
《诛仙世界》玩家流失分析:副本难度、经济系统与运营策略的多重困境
老房子加装电梯后,为何房价不涨反跌?内行人:6个“硬伤”导致
三七粉的功效与作用,天然免疫力提升的秘密武器!
深海能源装备自主化取得重大突破
如何正确使用塑料盒保存普洱茶饼:技巧与注意事项全解析
机械工程的多学科融合与应用
近视和远视可以一并存在吗
医疗美容设计公司:如何通过医疗器械设备设计提升治疗效果
DeepSeek-R1解读:纯强化学习,模型推理能力提升的新范式?
行业认证是什么?如何获得行业认证?
专家解读:鸡蛋可以天天吃吗?
在翔安根治胃癌竟不用开腹!3D手术“零出血”→
12315处理案件程序详解
透过“唇色”也能看健康?医生:嘴唇出现3种现象,或是疾病暗示
陆军军医大学团队发现:DHA可增强自然杀伤细胞抗癌活性
PCSK9抑制剂有什么用
第十七军团怀言者:从虔诚到混沌的背叛史
投资战略:揭秘成功的投资蓝图与策略
三角函数tan和sec关系,tan和sec之间的数学关系
一文详解:优质蛋白食物大盘点
蜜袋鼯:终极指南
探秘蜜袋鼯的奇妙世界:从野外到宠物的全面指南
区块链:公有链、私有链、联盟链
小学生写字正确姿势全解析:从坐姿到握笔的全方位指导
孕妇可不可以吃布洛芬
古今称谓趣谈|夫妻称谓变化考
四挡的挂挡技巧是什么
售后技术支持具体是做什么的
售后技术支持具体是做什么的
如何精准制定战略蓝图,引领组织未来发展方向?