27 #include <Ice/Properties.h>
42 #include <Calibration/Calibration.h>
49 ImageSequenceProvider::onInitCapturingImageProvider()
52 filePathLeft = getProperty<std::string>(
"PathLeft").getValue();
55 filePathRight = getProperty<std::string>(
"PathRight").getValue();
58 setImageFormat(visionx::ImageDimension(getProperty<ImageDimension>(
"ImageSize").getValue()),
60 setImageSyncMode(eFpsSynchronization);
61 frameRate = getProperty<float>(
"FrameRate").getValue();
64 bitmapSequenceCapture = NULL;
67 loadNewImageAtNextCapture =
true;
70 std::string calibrationFileName = getProperty<std::string>(
"CalibrationFile").getValue();
71 if (!calibrationFileName.empty())
73 std::string fullCalibrationFileName;
77 ARMARX_ERROR <<
"Could not find camera calibration file in ArmarXDataPath: "
78 << calibrationFileName;
81 if (!ivtStereoCalibration.LoadCameraParameters(fullCalibrationFileName.c_str(),
true))
83 ARMARX_ERROR <<
"Error loading camera calibration file: "
84 << fullCalibrationFileName;
90 repeatImageCount = getProperty<int>(
"RepeatImageCount");
94 ImageSequenceProvider::onExitCapturingImageProvider()
98 for (
int i = 0; i < getNumberImages(); i++)
101 delete resizedImages[i];
105 delete[] resizedImages;
112 ImageSequenceProvider::onStartCapture(
float frameRate)
114 if (!bitmapSequenceCapture->OpenCamera())
117 "Opening bitmap sequence \"" + filePathLeft +
"\" failed.");
121 loadNewImageAtNextCapture =
true;
122 currentRepeatCount = repeatImageCount - 1;
127 ImageSequenceProvider::onStopCapture()
129 bitmapSequenceCapture->CloseCamera();
133 ImageSequenceProvider::capture(
void** ppImageBuffers)
135 bool succeeded =
true;
137 if (loadNewImageAtNextCapture)
139 std::unique_lock lock(captureMutex);
143 loadNewImageAtNextCapture = getProperty<bool>(
"LoadNextImageAutomatically").getValue();
145 ++currentRepeatCount;
146 if (currentRepeatCount == repeatImageCount)
148 succeeded = bitmapSequenceCapture->CaptureImage(images);
149 currentRepeatCount = 0;
153 bitmapSequenceCapture->Rewind();
154 succeeded = bitmapSequenceCapture->CaptureImage(images);
163 for (
int i = 0; i < getNumberImages(); i++)
165 ::ImageProcessor::Resize(images[i], resizedImages[i]);
167 memcpy(ppImageBuffers[i],
168 resizedImages[i]->pixels,
169 getImageFormat().dimension.width * getImageFormat().dimension.height *
170 getImageFormat().bytesPerPixel);
180 ImageSequenceProvider::getStereoCalibration(
const Ice::Current&
c)
182 return stereoCalibration;
186 ImageSequenceProvider::getImagesAreUndistorted(
const Ice::Current&
c)
188 return getProperty<bool>(
"ImagesAreUndistorted").getValue();
192 ImageSequenceProvider::setImageFilePath(
const std::string& imageFilePathLeft,
193 const std::string& imageFilePathRight,
194 const Ice::Current&
c)
196 filePathLeft = imageFilePathLeft;
197 filePathRight = imageFilePathRight;
203 ImageSequenceProvider::OpenImageFiles()
205 std::unique_lock lock(captureMutex);
207 bool isStereoMode = filePathRight.length() > 0;
209 std::string fullFilePathLeft, fullFilePathRight;
213 ARMARX_ERROR <<
"Could not find left image sequence file in ArmarXDataPath: "
219 ARMARX_ERROR <<
"Could not find right image sequence file in ArmarXDataPath: "
223 if (bitmapSequenceCapture)
225 delete bitmapSequenceCapture;
228 bitmapSequenceCapture =
new CBitmapSequenceCapture(
229 fullFilePathLeft.c_str(), (isStereoMode ? fullFilePathRight.c_str() : NULL));
235 if (bitmapSequenceCapture->OpenCamera())
237 width = bitmapSequenceCapture->GetWidth();
238 height = bitmapSequenceCapture->GetHeight();
240 loadNewImageAtNextCapture =
true;
250 for (
int i = 0; i < getNumberImages(); i++)
253 delete resizedImages[i];
257 delete[] resizedImages;
261 setNumberImages((isStereoMode ? 2 : 1));
264 images =
new CByteImage*[getNumberImages()];
266 for (
int i = 0; i < getNumberImages(); i++)
268 images[i] =
new CByteImage(width, height, CByteImage::eRGB24);
271 resizedImages =
new CByteImage*[getNumberImages()];
273 for (
int i = 0; i < getNumberImages(); i++)
281 ImageSequenceProvider::loadNextImage(
const Ice::Current&
c)
283 std::unique_lock lock(captureMutex);
285 loadNewImageAtNextCapture =
true;