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, …);
我目前正在开发一种软件,该软件使用 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, …);