0

我正在尝试使用这个相机 SDK,假设相机有这个名为 CameraGetImageData(BYTE* data) 的函数,我假设它接受一个字节数组,用图像数据修改它,然后返回一个基于状态码关于成功/失败。SDK 没有提供任何文档(甚至没有代码注释),所以我只是在这里猜测。这是我认为有效的代码片段

BYTE* data = new BYTE[10000000]; // an array of an arbitrary large size, I'm not 
                                 // sure what the exact size needs to be so I 
                                 // made it large
CameraGetImageData(data);
// Do stuff here to process/output image data

我已经在 Visual Studio 中运行了带有断点的代码,并且可以确认 CameraGetImageData 函数确实修改了数组。现在我的问题是,相机输出数据有标准方法吗?我应该如何开始使用这些数据以及每个字节代表什么?相机以 8 位颜色捕获。

4

5 回答 5

1

拍摄纯红色、纯绿色和纯蓝色。看看结果如何。

另外,如果你有内存的话,我会把数组设为 1 亿,而不是 1000 万,至少最初是这样。使用 24 位每像素的 10 兆像素相机将使用 3000 万字节,比您的阵列还大。如果它做一些疯狂的事情,比如为每种颜色存储 16 位,它可能需要多达 6000 万或 8000 万字节。

您可以在传递之前用数据填充这个大数组。例如用重复的“01234567”填充它。然后很明显哪些字节已写入,哪些字节未写入,因此您可以计算出返回的实际大小。

于 2012-07-20T07:47:59.803 回答
0

我认为没有标准,但您可以尝试通过在相机前放置一些纯色图像来确定哪些值是什么。所以所有像素都将是大致相同的颜色。了解应该在每个像素中存储什么颜色后,您可能会了解颜色在数组中的表示方式。我会选择black, white, reg, green, blue图像。

但也要考虑找到一个更好SDK的文档,因为只制作一个大数组是非常糟糕的设计

于 2012-07-20T07:38:06.793 回答
0

您应该查看相机 SDK 上的文档,因为数据输出没有“标准”或“通用”方式。它可以是原始数据,可以是 RGB 数据,甚至可以是已经压缩过的数据。如果相机供应商没有提供任何信息,您可以尝试查找一些处理最常见格式的库,并尝试传递您必须查看的数据以查看会发生什么。

于 2012-07-20T07:39:35.810 回答
0

甚至不知道相机的类型,这个问题几乎是不可能回答的。如果它是一台科学相机,它很可能符合 IEEE 1394(又名 IIDC 或 DCAM)标准。我亲自使用过 Hamamatsu 制造的这种相机,使用这个与相机交互。

在我的情况下,相机输出只是原始数据。相机本身是单色的,每个像素的深度分辨率为 12 位。因此,每个像素强度作为 16 位无符号值存储在结果数组中。数组的大小只是width * height * 2字节,其中widthheight是以像素为单位的图像尺寸,因子2是每像素 16 位。widthheight是从所选相机模式中预先知道的。

如果您有结果图像的尺寸,请尝试将字节数组转储到文件中并在 Python 或 Matlab 中加载结果,然后尝试将内容可视化。另一种可能性是使用ImageJ之类的图像编辑器加载这个原始文件,并希望从中得到任何东西。

祝你好运!

于 2012-07-20T07:46:56.120 回答
-1

我希望这个问题的解决方案对您有所帮助:https : //stackoverflow.com/a/3340944/291372 实际上您有一个像素数组(如果您的相机以 8 位捕获,则假设每个像素 1 个字节)。你需要什么 - 只是确定宽度和高度。之后,您可以尝试从字节数组中恢复位图图像。

于 2012-07-20T07:46:42.050 回答