33#include <Image/ImageProcessor.h>
43 auto providerSplit =
armarx::Split(providersRaw,
";",
true,
true);
45 for (std::string providerStr : providerSplit)
50 std::set<size_t> imageSelection;
51 if (
split.size() >= 2)
55 std::set<size_t>(imageSelectionVec.begin(), imageSelectionVec.end());
63 imageProviderData[name].imageSelection = imageSelection;
70 std::unique_lock lock(mutex);
72 ::visionx::ImageDimension maxDim;
73 for (
auto& pair : imageProviderData)
75 auto name = pair.first;
76 auto&
data = pair.second;
77 auto& selection =
data.imageSelection;
79 const auto& imageProviderInfo =
data.providerInfo;
80 if (selection.empty())
82 for (
int i = 0; i < imageProviderInfo.numberImages; i++)
87 data.numImages = imageProviderInfo.numberImages;
88 if (imageProviderInfo.imageFormat != imageProviderInfo.imageFormat)
92 maxDim.width = std::max(imageProviderInfo.imageFormat.dimension.width, maxDim.width);
93 maxDim.height = std::max(imageProviderInfo.imageFormat.dimension.height, maxDim.height);
95 data.srcCameraImages.clear();
97 for (
auto&
index : selection)
101 new CByteImage(imageProviderInfo.imageFormat.dimension.width,
102 imageProviderInfo.imageFormat.dimension.height,
103 CByteImage::eRGB24)));
106 ARMARX_INFO <<
"max image dimension: " << maxDim.width <<
"x" << maxDim.height;
107 totalNumberOfImages = 0;
108 for (
auto& pair : imageProviderData)
110 auto name = pair.first;
111 auto&
data = pair.second;
112 auto& selection =
data.imageSelection;
113 data.targetCameraImages.clear();
114 data.resize = maxDim.width !=
data.providerInfo.imageFormat.dimension.width ||
115 maxDim.height !=
data.providerInfo.imageFormat.dimension.height;
117 <<
": image dimension: " <<
data.providerInfo.imageFormat.dimension.width
118 <<
"x" <<
data.providerInfo.imageFormat.dimension.height
119 <<
" resizing: " <<
data.resize;
121 for (
auto&
index : selection)
125 new CByteImage(maxDim.width, maxDim.height, CByteImage::eRGB24)));
126 totalNumberOfImages++;
156 std::unique_lock lock(mutex);
157 std::vector<CByteImage*> images;
158 for (
auto& pair : imageProviderData)
160 const auto name = pair.first;
161 auto&
data = pair.second;
171 armarx::MetaInfoSizeBasePtr info;
172 std::vector<CByteImage*> tmpImageVec;
173 for (
auto& image :
data.srcCameraImages)
175 tmpImageVec.push_back(image.get());
177 auto numImg =
getImages(name, tmpImageVec.data(), info);
179 if (numImg !=
data.numImages)
182 <<
"Unable to transfer or read images: returned number of images "
183 << numImg <<
" expected: " <<
data.numImages;
187 for (
auto& image :
data.srcCameraImages)
191 images.push_back(image.get());
195 auto targetImg =
data.targetCameraImages.at(i).get();
196 ::ImageProcessor::Resize(image.get(), targetImg);
197 images.push_back(targetImg);
SpamFilterDataPtr deactivateSpam(SpamFilterDataPtr const &spamFilter, float deactivationDurationSec, const std::string &identifier, bool deactivate)
std::string getConfigIdentifier()
Retrieve config identifier for this component as set in constructor.
Property< PropertyType > getProperty(const std::string &name)
void onConnectImageProcessor() override
void onExitImageProcessor() override
armarx::PropertyDefinitionsPtr createPropertyDefinitions() override
void onInitImageProcessor() override
void enableResultImages(int numberImages, ImageDimension imageDimension, ImageType imageType, const std::string &name="")
Enables visualization.
void usingImageProvider(std::string name)
Registers a delayed topic subscription and a delayed provider proxy retrieval which all will be avail...
bool waitForImages(int milliseconds=1000)
Wait for new images.
bool isNewImageAvailable()
ImageProviderInfo getImageProvider(std::string name, ImageType destinationImageType=eRgb, bool waitForProxy=false)
Select an ImageProvider.
int getImages(CByteImage **ppImages)
Poll images from provider.
void provideResultImages(CByteImage **images, armarx::MetaInfoSizeBasePtr info=nullptr)
sends result images for visualization
#define ARMARX_CHECK_POSITIVE(number)
This macro evaluates whether number is positive (> 0) and if it turns out to be false it will throw a...
#define ARMARX_CHECK_EQUAL(lhs, rhs)
This macro evaluates whether lhs is equal (==) rhs and if it turns out to be false it will throw an E...
#define ARMARX_INFO
The normal logging level.
#define ARMARX_ERROR
The logging level for unexpected behaviour, that must be fixed.
#define ARMARX_WARNING
The logging level for unexpected behaviour, but not a serious problem.
This file offers overloads of toIce() and fromIce() functions for STL container types.
std::vector< std::string > split(const std::string &source, const std::string &splitBy, bool trimElements=false, bool removeEmptyElements=false)
std::vector< std::string > Split(const std::string &source, const std::string &splitBy, bool trimElements=false, bool removeEmptyElements=false)
IceUtil::Handle< class PropertyDefinitionContainer > PropertyDefinitionsPtr
PropertyDefinitions smart pointer type.
std::unique_ptr< CByteImage > CByteImageUPtr