gpt4 book ai didi

c++ - Triclops Stereo API 可以用来处理离线图像吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:55:38 25 4
gpt4 key购买 nike

还是完全依赖于 Bumblebee(或任何其他 Point Grey Imaging 传感器)?我正在尝试链接 bumblebee 2 stereo rig 附带的立体处理 API 来处理一些离线图像。似乎三叶草立体功能需要一些上下文标志和 input.cal 和 input.ppm 形式的校准文件(即包含两个立体校正图像的一个图像不知何故模糊和重叠)。我如何从其他离线图像获取此 input.ppm 文件以仍然能够使用三叶草立体 API。还有标定文件input.cal,能否获取到与离线图像一致,如何获取?

最佳答案

是的,可以使用 Triclops API 来处理离线图像。您指出的要求是来自相机和图像文件的校准文件(.cal)。校准文件最好在图像捕获时提取,但根据我的经验,除非您更改设置,否则它始终保持不变。为了满足 Triclops API 的输入,您还需要使用 Point Grey Fly Capture API,因为它提供了图像转换方法。我的项目完全符合您的要求。我在现场捕获原始像素交错图像,然后使用 FlyCapture 和 Triclops API 对其进行处理,以创建校正图像和视差图像以及来自立体对的点云。

查看 Point Grey 示例及其 API 文档,了解如何捕获校准文件。本质上,该方法是这样的:flycaptureGetCalibrationFileFromCamera(context, &szCalFile); 其中上下文是“相机上下文”

您的初始图像文件格式会改变转换方法,但就我而言,这里是我如何使用 C++ 将原始图像转换为立体图像。我正在使用大黄蜂 XB3 彩色相机,其原始图像大小为 1280x960,并从外部两个相机抓取图像:

   // Read raw file 
//pFile = fopen ( "FlyCap.raw" , "rb" );
pFile = fopen ( argv[1] , "rb" );
if (pFile==NULL) {fputs ("File error",stderr); exit (1);}

// Set raw file size
ISize = (numCols*numRows*bytesPerPixel);

// allocate memory to contain the whole file:
buffer = (unsigned char*) malloc (sizeof(char)*ISize);
if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}

// copy the file into the buffer:
result = fread (buffer,1,ISize,pFile);
if (result != ISize) {fputs ("Reading error",stderr); exit (3);}

// Create the FlyCapture Context for processing
fe = flycaptureCreateContext( &flycapture );
_HANDLE_FLYCAPTURE_ERROR( "flycaptureCreateContext()", fe );

fe = flycaptureSetColorProcessingMethod(flycapture, FLYCAPTURE_HQLINEAR);
_HANDLE_FLYCAPTURE_ERROR( "flycaptureSetColorProcessingMethod()", fe );

fe = flycaptureSetColorTileFormat(flycapture, FLYCAPTURE_STIPPLEDFORMAT_GBRG);
_HANDLE_FLYCAPTURE_ERROR( "flycaptureSetColorTileFormat()", fe );

//Import the raw image in buffer into FlyCaptureImage structure
flycaptureImage.iCols = 1280;
flycaptureImage.iRows = 960;
flycaptureImage.iNumImages = 2;
flycaptureImage.bStippled = true;
flycaptureImage.pixelFormat = FLYCAPTURE_RAW16;
flycaptureImage.iRowInc = 2560;
flycaptureImage.timeStamp.ulSeconds = 100;
flycaptureImage.timeStamp.ulMicroSeconds = 100;
flycaptureImage.pData = buffer;

// Create buffers for holding the color and mono images
unsigned char* rowIntColor =
new unsigned char[ numCols * numRows * flycaptureImage.iNumImages * 4 ];
unsigned char* rowIntMono =
new unsigned char[ numCols * numRows * flycaptureImage.iNumImages ];

// Create a temporary FlyCaptureImage for preparing the stereo image
FlyCaptureImage tempColorImage;
FlyCaptureImage tempMonoImage;

tempColorImage.pData = rowIntColor;
tempMonoImage.pData = rowIntMono;


// Convert the pixel interleaved raw data to row interleaved format
fe = flycapturePrepareStereoImage( flycapture, flycaptureImage, &tempMonoImage, &tempColorImage );
_HANDLE_FLYCAPTURE_ERROR( "flycapturePrepareStereoImage()", fe );

//Save side-by-side color stereo image
fe = flycaptureSaveImage( flycapture, &tempColorImage, stereoimg, FLYCAPTURE_FILEFORMAT_PPM );
_HANDLE_FLYCAPTURE_ERROR( "flycaptureSaveImage()", fe );

printf ("Saving Stereo...\n");

请注意,到目前为止我根本没有使用 Triclops API。 flycaptureSaveImage(); 的输出输入到 Triclops 方法中。那时有一些选项可以处理彩色与单色。看看他们的 Triclops API 附带的名为“stereoto3dpoints.cpp”的 Point Grey 示例,它接管了我离开的地方。我希望这可以帮助你。

关于c++ - Triclops Stereo API 可以用来处理离线图像吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10320467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com