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图像到本地。
热门推荐
江西赣州狗咬人事件:文明养犬,刻不容缓
四川狗咬人案引热议:狗主人责任几何?
《火影忍者》中佐助的MBTI类型、为人处世与基本资料
宇智波带土的5次断臂经历:从热血少年到冷酷面具男的残酷蜕变
成吉思汗的墓找到了吗?成吉思汗墓发现真相揭秘
ArcGIS在生境质量评估中的应用:以兰州地区为例
ArcGIS+InVEST:生态分析的黄金搭档
北交所助力北京“专精特新”企业腾飞
五新隧装并购重组:北交所投资新机遇
北交所“深改19条”:中小企业发展的新机遇
韩国第一个被秦灭,为何却说赵国灭亡,才是五国真正崩溃的开始
胡服骑射:古代汉族与少数民族文化交流的典范
当心!体内津液亏虚的五大预警信号
8种食物帮你快速补充体内津液
津液不足怎么调理
中医话健康——蜜煎导(古人的开塞露)
真材实料!健脾祛湿八珍糕,软糯香甜口感佳
Windows 11效率提升大法:10招让你飞速体验!
一边发烧一边冷得发抖
西安衰落背后:缺水与地利之困
从“作业没写完”到时间管理达人:培养弟弟的时间管理能力
弟弟写作业拖拉怎么办?这些方法让你不再烦恼
感冒药后出汗,康复路上的“双刃剑”?
黄金价格受哪些因素影响?什么时候可能出现价格下跌?
《西游记》里的“火焰山”真实存在吗?
北交所开户门槛50万,你准备好了吗?
北交所开户攻略:轻松掌握投资新机遇!
中国禁摩的意义何在?全国超二百个城市不准开,却准许生产准许卖
揭秘嘉庆帝后宫:乾隆遗孀的生活真相
故宫探秘:符望阁里的嘉庆帝后宫