#include <iostream>
#include <cvb/driver/stream.hpp>
#include <cvb/device_factory.hpp>
#include <cvb/spectral/spectral.hpp>
#include <cvb/spectral/cube.hpp>
#include <cvb/spectral/wrapped_cube.hpp>
std::vector<Cvb::ImagePtr> GrabImageVec(
Cvb::String driverPath,
int numImg)
{
std::vector<Cvb::ImagePtr> imgVec;
imgVec.reserve(numImg);
auto stream = device->Stream();
stream->RingBuffer()->ChangeCount(numImg, Cvb::DeviceUpdateMode::NewDeviceImage);
stream->Start();
for (int i = 0; i < numImg; ++i)
{
Cvb::ImagePtr img = stream->WaitFor(std::chrono::seconds(10), res);
if (res == Cvb::WaitStatus::Timeout)
throw std::runtime_error("acquisition timeout");
if( i % 10 == 0)
std::cout << ".";
imgVec.push_back(img);
}
stream->Stop();
return imgVec;
}
int main()
{
try
{
int numberOfImages = 100;
std::cout << "Start acquiring " << numberOfImages << " images from:\n\t" << vinDriverPath << std::endl;
std::vector<Cvb::ImagePtr> imgVec = GrabImageVec(vinDriverPath, numberOfImages);
auto metaData = stackedCube->MetaData();
int bandsOut = metaData->ReadField<int>(Cvb::Spectral::FieldID::Bands);
std::vector<double> wavelengths(bandsOut);
for (int i = 0; i < bandsOut; ++i)
wavelengths.at(i) = 400 + i;
metaData->WriteField<std::vector<double>>(Cvb::Spectral::FieldID::Wavelength, wavelengths);
stackedCube->Save(enviHeaderFile, enviBinaryFile);
std::cout << "\nSaved Cube to file:\n\t"
<< enviHeaderFile << "\n\t"
<< enviBinaryFile << std::endl;
}
catch (const std::exception& error)
{
std::cout << error.what() << std::endl;
}
}
static std::unique_ptr< Cube > FromImages(const std::vector< ImagePtr > &images, CubeEncoding bufferLayout)
static std::shared_ptr< T > Open(const String &provider, AcquisitionStack acquisitionStack=AcquisitionStack::PreferVin)
String ExpandPath(const String &path)
std::shared_ptr< Image > ImagePtr