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

时间:2015-02-13 10:53:46

标签: c++ image-processing computer-vision

我目前正在开发一种软​​件,该软件使用GigE相机记录光谱并对其进行分析。但由于这种分析非常耗时,因此部分工作已在FPGA上完成。相机的一个记录具有320×256的格式(320个光谱,256px)。 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);

1 个答案:

答案 0 :(得分:0)

我通过与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, …);