我正在尝试使用这款相机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位色捕获。
答案 0 :(得分:1)
拍摄纯红色,纯绿色和纯蓝色的照片。看看会发生什么。
另外,如果你有记忆,我至少在最初的时候,我会把阵列变成1亿,而不是1000万。使用每像素24位的1000万像素摄像头将使用3000万字节,比您的阵列大。如果它像每个颜色存储16位那样疯狂,则可能需要多达6000万或8000万字节。
你可以在传递之前用数据填充这个大数组。例如,重复填充'01234567'。然后很明显是什么字节已写入,哪些字节没有,所以你可以计算出返回的实际大小。
答案 1 :(得分:0)
我认为没有标准,但您可以尝试通过在相机前放置一些纯色图像来确定哪些值是什么。所以所有像素都是大致相同的颜色。了解每个像素应存储的颜色,您可以了解颜色在数组中的表示方式。我会选择black, white, reg, green, blue
张图片。
但是也考虑找一个更好的SDK
哪个有文档,因为只做一个大数组是非常糟糕的设计
答案 2 :(得分:0)
您应该查看相机SDK上的文档,因为数据输出没有“标准”或“常用”方式。它可以是raw数据,也可以是RGB数据,甚至可以压缩。如果摄像机供应商没有提供任何信息,您可以尝试找到一些处理大多数常见格式的库,并尝试传递您拥有的数据以查看会发生什么。
答案 3 :(得分:0)
甚至不知道相机的类型,这个问题几乎无法回答。 如果它是一台科学相机,它很可能会遵守IEEE 1394(又名IIDC或DCAM)标准。我亲自使用这个由滨松制作的相机使用此library与相机连接。
在我的情况下,相机输出只是原始数据。相机本身是单色的,每个像素的深度分辨率为12位。因此,每个像素强度在结果数组中存储为16位无符号值。数组的大小只是width * height * 2
个字节,其中width
和height
是像素的图像尺寸,因子2
是每像素16位。 width
和height
在所选摄像机模式中是先验已知的。
如果你有结果图像的尺寸,尝试将你的字节数组转储到一个文件中,并在Python或Matlab中加载结果,并尝试可视化内容。另一种可能性是使用图像编辑器(例如ImageJ)加载此原始文件,并希望从中获取任何内容。
祝你好运!答案 4 :(得分:-1)
我希望这个问题的解决方案可以帮助您:https://stackoverflow.com/a/3340944/291372 实际上你有一个像素阵列(如果8位的相机功能,假设每像素1个字节)。你需要什么 - 只是确定宽度和高度。之后,您可以尝试从字节数组中恢复位图图像。