GigE Camera/MIL 库 - 部分图像被剪切

GigE Camera/MIL Library - Part of image gets cut

我目前正在开发一种软​​件,该软件使用 GigE 相机记录光谱并对其进行一些分析。但由于这种分析非常耗时,部分分析已经在 FPGA 上完成。相机的一个记录格式为 320 x 256(320 个光谱,256 像素)。 FPGA 获取此记录并将其与 256 x 1 矩阵相乘,因此最终结果为 320 x 1 矩阵。这个结果是一个列向量,它完全适合维度。但不幸的是,它显示为一个行向量,所以从 256 开始,所有内容都被删除了。 http://i.stack.imgur.com/YiRKR.png

所以我尝试设置不同的宽度尺寸:

MdigControl(MilDigitizer, M_SOURCE_SIZE_X, 320);

但是我得到一个错误,因为相机的高度和宽度属性是只读的。 有趣的是,当使用 Pleora Technologies 的免费版 eBus Player 时,它可以正常工作!我得到 1 x 320 的结果。 http://i.stack.imgur.com/wrBEo.png

有人可以帮忙吗?

谢谢

编辑: 以下代码显示了图像的分配和显示。

MappAlloc(M_DEFAULT, &MilApplication);
MsysAlloc(M_SYSTEM_GIGE_VISION, M_DEV0, M_DEFAULT, &MilSystem);
MdispAlloc(MilSystem, M_DEFAULT, MIL_TEXT("M_DEFAULT"), M_WINDOWED, &MilDisplay);
MdigAlloc(MilSystem, M_DEV0, MIL_TEXT("M_DEFAULT"), M_DEFAULT, &MilDigitizer);
MbufAllocColor(MilSystem, 3, 320, 1, 8+M_UNSIGNED, M_IMAGE+M_GRAB+M_DISP, &MilImageRGB);

unsigned char *testArray = new unsigned char[320*3];
MdigGrab(MilDigitizer, &MilImageRGB);

// Print values
MbufGetColor(MilImageRGB, M_PLANAR, M_ALL_BANDS, testArray);
for(int counterColorBand = 0; counterColorBand < 3; counterColorBand++)
{
  for(int counterPosition = 0; counterPosition < 320; counterPosition++)
  {
    std::cout << counterColorBand*320 + counterPosition << "-" << static_cast<unsigned>(testArray[counterColorBand * 320 + counterPosition]) << "\t";
  }
  std::cout << "\n\n";
}

//Display image
MdispSelect(MilDisplay, &MilImageRGB);

我通过联系 Matrox 客户服务找到了问题的解决方案,我想我已经让您知道了: 问题是,在我实际接收数据之前,它存储在内部存储器中,它使用 320x256px 的尺寸。通过一些代码可以避免这种情况:

MIL_INT64 Format = 0;
MdigInquire(MilDigitizer, M_SOURCE_BUFFER_FORMAT, &Format)
...
MbufAllocColor(…, 3, 1, 320, 8+M_UNSIGNED, M_IMAGE+M_GRAB+Format, …);