PDA

Visualizza la versione completa : [C++] Salvare/ rinominare file in maniera multipla


iljakie
13-07-2017, 12:52
Salve ragazzi, devo acquisire delle immagini attraverso una camera 3D. L'azienda produttrice ha fornito un software che permette l'acquisizione di una singola immagine ad ogni avvio del programma. Modificando il file c++ vorrei fare in modo che mi vengano acquisite piu immagini attraverso un unico lancio dell'applicazione. Per fare questo ho scritto un ciclo while come potete vedere nella parte in grassetto dove una singola immagine viene acquisita e salvata piu volte fintato che siamo nel ciclo while.

Il problema č che ad ogni ciclo l'immagine viene sovrascritta sempre nello stesso file points.pcd. Affinche questo avvenga, ad ogni ciclo il nome del file di destinazione deve cambiare. Ho provato a fare questo richiamando la funzione rename ma purtroppo questa non mi riconosce la sintassi "points" + [i] + ".pcd".

Vorrei ottenere in output una serie di file del tipo: points1.pcd points2.pcd..... Un suggerimento? :)



int main(int argc, char* argv[])


{ int i;
i=1;



int exitCode = EXIT_FAILURE;
const char* fileName = argc > 1 ? argv[1] : "points.pcd" ;


CToFCamera camera;
try
{
CToFCamera::InitProducer();
camera.OpenFirstCamera();


CEnumerationPtr ptrComponentSelector = camera.GetParameter("ComponentSelector");
CBooleanPtr ptrComponentEnable = camera.GetParameter("ComponentEnable");
CEnumerationPtr ptrPixelFormat = camera.GetParameter("PixelFormat");


// Parameterize the camera to send 3D coordinates and intensity data
ptrComponentSelector->FromString("Range");
ptrComponentEnable->SetValue( true );
ptrPixelFormat->FromString("Coord3D_ABC32f");


ptrComponentSelector->FromString("Intensity");
ptrComponentEnable->SetValue(true);
ptrPixelFormat->FromString("Mono16");


while (i<4 )

{

// Acquire one single image
BufferParts parts;
GrabResultPtr ptrGrabResult = camera.GrabSingleImage( 1000, &parts );

// Save 3D data
if ( ptrGrabResult->status == GrabResult::Ok )
{
SavePointCloud( parts, fileName );
rename ("points.pcd", "points" + [i] + ".pcd" );


}
else
{
cerr << "Failed to grab an image." << endl;
}

i++;

}
camera.Close();
exitCode = EXIT_SUCCESS;
}
catch ( GenICam::GenericException& e )
{
cerr << "Exception occurred: " << endl << e.GetDescription() << endl;
// After successfully opening the camera, the IsConnected method can be used
// to check if the device is still connected.
if ( camera.IsOpen() && ! camera.IsConnected() )
{
cerr << "Camera has been removed." << endl;
}


}


if ( CToFCamera::IsProducerInitialized() )
CToFCamera::TerminateProducer(); // Won't throw any exceptions


cout << endl << "Press Enter to exit." << endl;
while (cin.get() != '\n');


return exitCode;
}

shodan
13-07-2017, 14:11
#include <sstream>

while (i < 4) {
...

if ( ptrGrabResult etc...)
std::ostringstream oss;
oss << "points" << i << ".pcd";
SavePointCloud(etc)
rename("points.pcd", oss.str().c_str());
} etc ...

}

iljakie
13-07-2017, 16:34
#include <sstream>

while (i < 4) {
...

if ( ptrGrabResult etc...)
std::ostringstream oss;
oss << "points" << i << ".pcd";
SavePointCloud(etc)
rename("points.pcd", oss.str().c_str());
} etc ...

}


Grazie, domani in laboratorio proverņ ad acquisire immagini con questo codice :)

Loading