32 #include <Image/ImageProcessor.h>
41 offeringTopic(getProperty<std::string>(
"DebugObserverName").getValue());
42 offeringTopic(getProperty<std::string>(
"DebugDrawerTopicName").getValue());
44 doRewind = getProperty<bool>(
"Rewind").getValue();
46 Eigen::Vector2i dimensions = getProperty<Eigen::Vector2i>(
"Dimensions").getValue();
47 setImageFormat(visionx::ImageDimension(dimensions(0), dimensions(1)), visionx::eRgb);
50 rgbImages =
new CByteImage*[2];
51 rgbImages[0] =
new CByteImage(dimensions(0), dimensions(1), CByteImage::eRGB24);
52 rgbImages[1] =
new CByteImage(dimensions(0), dimensions(1), CByteImage::eRGB24);
53 depthBuffer = cv::Mat(dimensions(1), dimensions(0), CV_16UC1, 0.0);
55 std::string fileName = getProperty<std::string>(
"FileName").getValue();
59 ARMARX_ERROR <<
"Could not find point cloud file in ArmarXDataPath: " << fileName;
63 if (!std::filesystem::exists(fileName.c_str()))
69 fp = fopen(fileName.c_str(),
"rb");
73 if (fread(&totalFrames,
sizeof(int32_t), 1, fp) !=
sizeof(int32_t))
79 ARMARX_INFO <<
"total number of frames " << totalFrames;
85 debugObserver = getTopic<DebugObserverInterfacePrx>(
86 getProperty<std::string>(
"DebugObserverName").getValue());
87 debugDrawer = getTopic<DebugDrawerInterfacePrx>(
88 getProperty<std::string>(
"DebugDrawerTopicName").getValue());
106 if (currentFrame > totalFrames)
113 [[maybe_unused]]
auto r = fread(&totalFrames,
sizeof(int32_t), 1, fp);
123 ::ImageProcessor::Zero(rgbImages[0]);
124 ::ImageProcessor::Zero(rgbImages[1]);
130 [[maybe_unused]]
auto r = fread(×tamp,
sizeof(int64_t), 1, fp);
131 r = fread(&depthSize,
sizeof(int32_t), 1, fp);
132 r = fread(&imageSize,
sizeof(int32_t), 1, fp);
134 if (depthSize == rgbImages[1]->height * rgbImages[1]->width * 2)
136 r = fread(depthBuffer.data, depthSize, 1, fp);
139 else if (depthSize > 0)
141 uint8_t* tmpImage =
new uint8_t[depthSize];
143 unsigned long decompLength = rgbImages[1]->height * rgbImages[1]->width * 2;
145 r = fread(tmpImage, depthSize, 1, fp);
146 uncompress(depthBuffer.data, &decompLength, tmpImage, depthSize);
149 if (imageSize == rgbImages[0]->height * rgbImages[0]->width * 3)
151 r = fread(rgbImages[0]->pixels, imageSize, 1, fp);
153 else if (imageSize > 0)
155 std::vector<uint8_t> tmpImage(imageSize, 0);
157 r = fread(&tmpImage[0], imageSize, 1, fp);
158 cv::Mat decImg = cv::imdecode(tmpImage, 1);
159 imageSize = decImg.step * decImg.rows;
160 memcpy(rgbImages[0]->pixels, decImg.data, decImg.step * decImg.rows);
165 for (
int i = 0; i < rgbImages[1]->height; i++)
167 for (
int j = 0; j < rgbImages[1]->width; j++)
169 unsigned short value = depthBuffer.at<
unsigned short>(i, j);
171 rgbImages[1]->pixels[3 * (i * rgbImages[1]->width + j) + 0] =
value & 0xFF;
172 rgbImages[1]->pixels[3 * (i * rgbImages[1]->width + j) + 1] = (
value >> 8) & 0xFF;
180 for (
size_t i = 0; i < 2; i++)
182 memcpy(ppImageBuffers[i], rgbImages[i]->pixels, imageSize);
193 for (
size_t i = 0; i < 2; i++)