我有一个2048x2048的灰度图像矩阵,我想找到一些值为>的点。 0,并将其位置存储为2列和n行的数组(n也是已创建点的数量)这是我的算法:
int icount;
icount = 0;
for (int i = 0; i < 2048; i++)
{
for (int j = 0; j < 2048; j++)
{
if (iout.at<double>(i, j) > 0)
{
icount++;
temp[icount][1] = i;
temp[icount][2] = j;
}
}
}
我有两个问题:
我上面的算法不起作用,结果是
temp[1][1]=0 , temp[1][2]=0 , temp[2][1]=262 , temp[2][2]=655
这是完全错误的,正确的是:
temp[1][1]=1779 , temp[1][2]=149 , temp[2][1]=1780 , temp[2][2]=149
我得到了正确的结果,因为我在Matlab中实现了它,它是
[a,b]=find(iout>0);
答案 0 :(得分:2)
std::vector<std::pair<int, int>> temp;
然后使用(i, j)
为其添加push_back
对。无需事先知道尺寸:
temp.push_back(make_pair(i, j));
我们需要更多地了解您的问题和代码,以便能够判断算法有什么问题。
答案 1 :(得分:1)
定义指针类型的变量时,需要分配内存并使指针指向该内存地址。在您的情况下,您有一个多维指针,因此它需要多个分配。例如:
int **temp = new int *[100]; // This means you have room for 100 arrays (in the 2nd dimension)
int icount = 0;
for(int i = 0; i < 2048; i++) {
for(int j = 0; j < 2048; j++) {
if(iout.at<double>(i, j) > 0) {
temp[icount] = new int[2]; // only 2 variables needed at this dimension
temp[icount][1] = i;
temp[icount][2] = j;
icount++;
}
}
}
这对你有用,但是如果你确定你不需要任何超过预先分配的数组大小(本例中为100),那么这只会很好。如果你确切知道你需要多少,这种方法还可以。如果你知道最大可能,那也没关系,但可能会浪费。如果您不知道第一维需要多大的尺寸,则必须使用动态集合,例如IVlad建议的std::vector
。如果您使用我建议的方法,请不要忘记使用delete []temp[i];
和delete []temp;