Files
UnrealEngine/Engine/Plugins/Runtime/OpenCV/Source/OpenCVHelper/Public/OpenCVBlueprintFunctionLibrary.h
2025-05-18 13:04:45 +08:00

90 lines
3.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Kismet/BlueprintFunctionLibrary.h"
#include "OpenCVHelper.h"
#include "OpenCVBlueprintFunctionLibrary.generated.h"
DECLARE_LOG_CATEGORY_EXTERN(LogOpenCVBlueprintFunctionLibrary, Log, All);
class UTexture2D;
class UTextureRenderTarget2D;
UENUM(BlueprintType)
enum class EOpenCVArucoDictionary : uint8
{
Dict4x4 UMETA(DisplayName = "4x4"),
Dict5x5 UMETA(DisplayName = "5x5"),
Dict6x6 UMETA(DisplayName = "6x6"),
Dict7x7 UMETA(DisplayName = "7x7"),
DictOriginal UMETA(DisplayName = "Original")
};
UENUM(BlueprintType)
enum class EOpenCVArucoDictionarySize : uint8
{
DictSize50 UMETA(DisplayName = "50"),
DictSize100 UMETA(DisplayName = "100"),
DictSize250 UMETA(DisplayName = "250"),
DictSize1000 UMETA(DisplayName = "1000")
};
USTRUCT(BlueprintType)
struct FOpenCVArucoDetectedMarker
{
GENERATED_BODY()
FOpenCVArucoDetectedMarker()
: Id(-1)
{
}
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "OpenCV | ArUco")
int32 Id;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "OpenCV | ArUco")
TArray<FVector2D> Corners;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "OpenCV | ArUco")
FTransform Pose;
};
UCLASS(BlueprintType)
class OPENCVHELPER_API UOpenCVBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
/**
* Detects a camera calibration chessboard in the supplied image
*
* @param InRenderTarget Input image in which to search for a chessboard
* @param InPatternSize Number of interior corners on the physical chessboard (rows, columns)
* @param bDebugDrawCorners If true, output a Texture2D showing the detected corner debug info overlaid on the input image
* @param OutDebugTexture Output debug image (required if bDebugDrawCorners is True)
* @param OutDetectedCorners Output array of corners detected in the input image
* @return Total number of corners detected in the input image
*/
UFUNCTION(BlueprintCallable, Category = "OpenCV", Meta = (DisplayName = "OpenCV Chessboard Detect Corners"))
static int32 OpenCVChessboardDetectCorners(const UTextureRenderTarget2D* InRenderTarget, const FIntPoint InPatternSize, const bool bDebugDrawCorners, UTexture2D*& OutDebugTexture, TArray<FVector2D>& OutDetectedCorners);
/**
* Detects all ArUco markers in the supplied image
*
* @param InRenderTarget Input image in which to search for markers
* @param InDictionary Which ArUco marker dictionary to use for detection
* @param InDictionarySize The size of the ArUco marker dictionary
* @param bDebugDrawMarkers If true, output a Texture2D showing the detected marker debug info overlaid on the input image
* @param bEstimatePose If true, return the 3D pose for each marker relative to the camera position
* @param InMarkerLengthInMeters Length in meters of one side of the physical marker (required if bEstimatePose is True)
* @param InCameraCalibrationParameters Lens distortion parameters for the incoming image (required if bEstimatePose is True)
* @param OutDebugTexture Output debug image (required if bDebugDrawMarkers is True)
* @param OutDetectedMarkers Output array of markers detected in the input image
* @return Total number of markers detected in the input image
*/
UFUNCTION(BlueprintCallable, Category = "OpenCV | ArUco", Meta = (DisplayName = "OpenCV ArUco Detect Markers"))
static int32 OpenCVArucoDetectMarkers(const UTextureRenderTarget2D* InRenderTarget, const EOpenCVArucoDictionary InDictionary, const EOpenCVArucoDictionarySize InDictionarySize, const bool bDebugDrawMarkers, const bool bEstimatePose, const float InMarkerLengthInMeters, const FOpenCVLensDistortionParametersBase& InLensDistortionParameters, UTexture2D*& OutDebugTexture, TArray<FOpenCVArucoDetectedMarker>& OutDetectedMarkers);
};