首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Triclops Stereo API可以用于处理离线图像吗?

Triclops Stereo API可以用于处理离线图像吗?
EN

Stack Overflow用户
提问于 2012-04-26 01:07:07
回答 1查看 1.4K关注 0票数 2

或者它完全依赖于Bumblebee (或任何其他点灰度成像传感器)?我正在尝试链接与大黄蜂2立体声钻机附带的立体声处理API来处理一些离线图像。似乎triclops立体声功能需要一些上下文标志和input.cal和input.ppm形式的校准文件(即包含两个立体声校正图像的一个图像,不知何故模糊和重叠)。如何从其他脱机图像中获取此input.ppm文件,以便仍然能够使用triclops立体声API。那么校准文件input.cal呢?能否获得与离线图像一致的文件?如何获得?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-14 20:43:21

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

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

您的初始图像文件格式将改变转换方法,但在我的例子中,我是如何使用C++完成从raw到立体声的转换的。我使用的是大黄蜂XB3彩色相机,原始图像大小为1280x960,并从外部的两个摄像头抓取图像:

代码语言:javascript
复制
   // 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方法的内容。在这一点上,有一些处理彩色与单声道的选项。看看他们的名为'stereoto3dpoints.cpp‘的Triclops API附带的Point Grey示例,它从我离开的地方开始。我希望这能帮到你。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10320467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档