还是完全依赖大黄蜂(或其他任何点灰度成像传感器)? 我正在尝试链接大黄蜂2立体声装置附带的立体声处理API以处理一些脱机图像。看起来,Triclops立体声功能需要一些上下文标记和校准文件,形式为input.cal和input.ppm(即包含两个立体声整流图像的图像某种程度上模糊和覆盖)。如何从其他离线图像获取此输入.ppm文件,以便仍然可以使用triclops立体声API。那么校准文件input.cal怎么样,它可以被获得,以便它与离线图像一致,以及如何?可以使用Triclops立体声API来处理离线图像吗?
2
A
回答
2
是的,Triclops API可以用来处理离线图像。您指出的要求是来自相机和图像文件的校准文件(.cal)。校准文件最好在图像捕捉时提取,尽管根据我的经验,除非您更改设置,否则它始终保持不变。为了满足Triclops API的输入,您还需要使用Point Gray Fly Capture API,因为它提供了图像转换的方法。我的项目正在做你正在问的所有问题。我在场中捕捉原始像素交错图像,然后使用FlyCapture和Triclops API处理它们以创建校正和视差图像以及来自立体对的点云。
检查Point Grey示例及其API文档以了解如何捕获校准文件。本质上是这样的:flycaptureGetCalibrationFileFromCamera(context, &szCalFile);
其中上下文是'相机上下文'
您的初始图像文件格式将改变转换方法,但在我的情况下,这里是我如何使用C++从原始转换为立体声。我使用的是大黄蜂XB3彩色摄像机与原始图像1280×960的尺寸和从外两个摄像头抓取图像:
// 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附带的Point Grey示例,名为“stereoto3dpoints.cpp”,它从我离开的地方开始。我希望这能够帮到你。
相关问题
- 1. 我可以使用C++来处理Twitter API吗?
- 2. 我可以使用Editbox的OnChange事件来处理线程吗?
- 3. TImage可以处理32bpp JPG图像吗?
- 4. 我可以使用线程来更改GTK图像吗?
- 5. 我们可以在Sencha touch中使用Handler处理图像吗
- 6. 可以离线使用google语音API吗?
- 7. 是否可以对图像序列使用图像预处理?
- 8. MVC图像处理 - 我可以使所有图像显示大致相同吗?
- 9. 该图像处理代码可以优化以使用更少的内存吗?
- 10. K-means可以用来帮助基于像素值的图像分离吗?
- 11. 可以即时执行图像处理的图像API /应用程序?
- 12. Socket.IO事件处理可能像AJAX调用事件处理声明一样吗?
- 13. 我可以使用Zend_Log来处理PHP错误吗?
- 14. 我可以使用服务来处理触摸事件吗?
- 15. 我可以使用.load()JQuery函数来处理表单吗?
- 16. 我可以使用递归来处理GPIO吗?
- 17. 我可以使用闪存来处理视频吗?
- 18. 我可以使用Catalyst来显示图像或图形吗?
- 19. 使用Java以多线程模式处理图像
- 20. 线性立体声/双声道录音
- 21. 可以在Android应用程序中离线使用Google Charts API吗?
- 22. 我可以使用浮油建立分离滑块吗?
- 23. Python图像处理线程
- 24. 图像处理:如何处理图像以用于初始化
- 25. Can Keras可以处理不同大小的输入图像吗?
- 26. 我可以处理base64编码图像的水印吗?
- 27. Flash可以处理的图像分辨率有限制吗?
- 28. 回形针可以处理非图像文件吗?
- 29. 有人可以解释这个图像处理算法吗?
- 30. 我可以使用JJIL在Java Server上执行图像处理吗