0

我不是软件工程师。对不起,如果你觉得这个问题很尴尬。

我想要一种图像格式,它应该是内存效率高但易于在普通 C 中操作的图像格式。更具体地说,我希望将每个像素存储在以下形式的数组中:

像素[行#][列#][颜色]

其中索引 row# 和 column#(最大为 255)是坐标,索引 Color(最大为 2)包含由位置指定的像素的 RGB 值(使用 pixel[255][255][1]检查或操作右下角像素内的绿色量)。

我的目标是在机器人应用程序中使用这种形式,以便能够通过使用“嵌套 for 循环”从左上角开始扫描图像轻松找到第一个红色/蓝色/绿色像素的坐标(是的,不是创造性的解决方案) . 在这里,您可能会说,如果图像上有白色区域,代码将返回错误的坐标。我知道这一事实,但图像不会有复杂的图案,并且(如有必要)我可以将不相关的颜色存储为黑色。我也不关心亮度、伽马、阿尔法等等。

那么是否可以编写一个 C(或 C++,如果必须)代码以每隔 0.5 秒从网络摄像头拍摄一次快照,并将来自网络摄像头的原始图像转换为上面指定的形式?如果您说C不能直接到达相机,是否可以编写代码调用可以到达相机的软件,拍摄快照然后将原始数据存储在文件中?如果是,我如何使用 C 代码读取这个原始数据文件才能至少尝试转换?我在笔记本电脑上使用 Windows Vista。

很抱歉让这个问题很长,但我不想留下任何不清楚的地方。

4

2 回答 2

2

是的,这样的文件格式是可能的。只有理智才能阻止它被实施/使用。

不过,使用相当广泛的某些格式几乎可以按照您正在考虑的方式进行扫描。例如,一个 32 位 BMP 在文件上有一个小标题,用于说明图片大小(x,y 像素尺寸)后跟原始像素值之类的信息,所以它基本上只是 ColorColorColor...为图像中的像素数。

使用 32 位 BMP 进行扫描的代码将非常简单——打开文件、为缓冲区分配空间以读取数据等的代码很容易比扫描代码长本身。

于 2012-06-18T00:57:43.580 回答
2

采用“标准”图像格式还意味着您拥有生成测试数据和独立查看结果的工具

用纯 C 语言编写最简单的代码(即使它不是很有效)是可移植像素图(ppm)。

它只是一个纯文本文件

P3 <cr>               # P3 means an ascii color file R,G,B
640 480 <cr>          # 640 pixels wide, 480 rows deep
255 <cr>              # maximum value is 255
# then just a row of RGB values separated by space with a CR 
255   0   0     0 255   0     0   0 255 #....... 640 triplets <cr> 
255 255   0   255 255 255     0   0   0  # ....... next row etc

还有一个更有效的二进制版本,其中数据是纯 RGB 字节,因此很容易在一次操作中读入 C 数组

于 2012-06-18T01:06:05.253 回答