我正在尝试从python中的png图像生成三维模型(.stl文件(。在python中,我实现了生成三维模型的目标。但它相当缓慢。例如,300-400个图像的图像序列花费大约400秒来生成stl。我尝试过线程和多处理,但它似乎对我来说不起作用。所以我决定在C语言中用ctypes和CDLL做得更快一点。
在python中,我使用numpy数组来恢复坐标数据。numpy数组的每个索引都是这样的。[1000,800,50]
每个元素是x、y和z值。
我试着用C语言制作它,但我不能给一个索引三个值。它只给出了最后一个值。
#include <stdio.h>
void try(int rows, int columns)
{
int row, column, z;
int vertices[rows][columns];
for(row = 1; row <= rows; row++)
{
for(column = 1; column <= columns; column++)
{
z = 50;
vertices[row][column] = (row,column,z);
printf("%d ", vertices[row][column]);
}
}
}
这是我使用的代码。我不知道是不是语法问题。但我想不出一个解决办法。
输出应该与上面类似。[1000,800,50]...
但是它只在终端中提示50。
那么,有可能在C中的数组的每个索引中保持3个值吗?所以我可以用C处理图像像素值,并将其返回到Python。
正如其他人所说,使用一个struct
实例数组可以同时存储三个(或更多(数据位。
根据您想要存储的数据的值,您可以将这些位"打包"到一个标准的C数据类型中(然后在需要时"解压缩"(。
以下是一个数据值范围为0-1023(10位(的示例。
// Uses 30 of 32bit wide 'int' datatype.
vertices[row][col] = row << 20 | col < 10 | z;
如果你知道"z"在一个小范围内,你可以为row
和/或col
使用更多的比特