35#include <Image/ImageProcessor.h>
45 auto providerSplit =
armarx::Split(providersRaw,
";",
true,
true);
47 for (std::string providerStr : providerSplit)
52 std::set<size_t> imageSelection;
53 if (
split.size() >= 2)
57 std::set<size_t>(imageSelectionVec.begin(), imageSelectionVec.end());
65 imageProviderData[name].imageSelection = imageSelection;
72 std::unique_lock lock(mutex);
74 ::visionx::ImageDimension maxDim;
75 for (
auto& pair : imageProviderData)
77 auto name = pair.first;
78 auto&
data = pair.second;
79 auto& selection =
data.imageSelection;
81 const auto& imageProviderInfo =
data.providerInfo;
82 if (selection.empty())
84 for (
int i = 0; i < imageProviderInfo.numberImages; i++)
89 data.numImages = imageProviderInfo.numberImages;
90 if (imageProviderInfo.imageFormat != imageProviderInfo.imageFormat)
94 maxDim.width = std::max(imageProviderInfo.imageFormat.dimension.width, maxDim.width);
95 maxDim.height = std::max(imageProviderInfo.imageFormat.dimension.height, maxDim.height);
97 data.srcCameraImages.clear();
99 for (
auto&
index : selection)
103 new CByteImage(imageProviderInfo.imageFormat.dimension.width,
104 imageProviderInfo.imageFormat.dimension.height,
105 CByteImage::eRGB24)));
108 ARMARX_INFO <<
"max image dimension: " << maxDim.width <<
"x" << maxDim.height;
109 totalNumberOfImages = 0;
110 for (
auto& pair : imageProviderData)
112 auto name = pair.first;
113 auto&
data = pair.second;
114 auto& selection =
data.imageSelection;
115 data.targetCameraImages.clear();
116 data.resize = maxDim.width !=
data.providerInfo.imageFormat.dimension.width ||
117 maxDim.height !=
data.providerInfo.imageFormat.dimension.height;
119 <<
": image dimension: " <<
data.providerInfo.imageFormat.dimension.width
120 <<
"x" <<
data.providerInfo.imageFormat.dimension.height
121 <<
" resizing: " <<
data.resize;
123 for (
auto&
index : selection)
127 new CByteImage(maxDim.width, maxDim.height, CByteImage::eRGB24)));
128 totalNumberOfImages++;
158 std::unique_lock lock(mutex);
159 std::vector<CByteImage*> images;
160 for (
auto& pair : imageProviderData)
162 const auto name = pair.first;
163 auto&
data = pair.second;
173 armarx::MetaInfoSizeBasePtr info;
174 std::vector<CByteImage*> tmpImageVec;
175 for (
auto& image :
data.srcCameraImages)
177 tmpImageVec.push_back(image.get());
179 auto numImg =
getImages(name, tmpImageVec.data(), info);
181 if (numImg !=
data.numImages)
184 <<
"Unable to transfer or read images: returned number of images "
185 << numImg <<
" expected: " <<
data.numImages;
189 for (
auto& image :
data.srcCameraImages)
193 images.push_back(image.get());
197 auto targetImg =
data.targetCameraImages.at(i).get();
198 ::ImageProcessor::Resize(image.get(), targetImg);
199 images.push_back(targetImg);
#define ARMARX_REGISTER_COMPONENT_EXECUTABLE(ComponentT, applicationName)
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)
Brief description of class MultiImageProvider.
void onConnectImageProcessor() override
void onExitImageProcessor() override
armarx::PropertyDefinitionsPtr createPropertyDefinitions() override
void onInitImageProcessor() override
static std::string GetDefaultName()
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