如何在数组中找到特定点?

时间:2016-02-19 16:54:59

标签: c++ arrays

我有一个二进制图像数据,大小为1280(宽)x1024(长)。数据存储在名为" CamBuff"的1d数组中。尺寸为1280 * 1024。

Image is something like this:| 0   1   2...  1278   1279 |
                             |1280...               2559 |
                             |.    .    .      .         |
                             |.    .    .      . 1310719 |

CamBuff: [ 0  1  2.... 1279  1280 ... 1310719]

图像数据应该只包含0和1,因为它是二进制图像数据(假设background = 0,object = 1)。

图像中有一个物体,我想找到它的中心位置。

我想到这样的事情(找到对象的宽度,但可能这是错误的):

int width = 1280;
int height = 1024;
int a = 0;
int b = 0;
int c, startrow, startcol, endrow, endcol, objectwidth, objectheight;
int h = 1;
int widthstart = 0;
int colstart = 0;


    for (int i=0; i<height; i++)
        {
            for(int k=0; k<width; k++)      
            {                               
                a = CamBuff[k];         
                b = CamBuff[h];         
                c = b - a;

                if(c != 0 && widthstart == 0)   
                {                           
                    startrow = h;                                   
                    widthstart = 1;

                }
                if(c != 0 && widthstart == 1)
                {
                    endrow = k;
                    widthstart = 0;

                }
                h++;

                objectwidth = (endrow - startrow)*0.5;          

            }
        }

如果有变化(从背景到对象,反之亦然),c!= 0

如何找到对象的x和y中心位置?

2 个答案:

答案 0 :(得分:1)

如果你想要一个表格的重心。您必须累积要保留的像素的所有位置,并除以这些像素的数量。

类似下面的代码将为您提供解决方案。

代码没有经过测试而且没有编译,我试图用你的符号取代Backgound的值为backgound(在你的情况下为0)

 const size_t acc_x=0, acc_y=0;
 for (int i=0; i<height; i++)
    {
        for(int k=0; k<width; k++)      
        {   if( image[i*width+k] != Backgound )
            { 
                acc_x += k
                acc_y += i;
                ++counter
            }
        }
   }
  const size_t barycenter_x = acc_x / counter;
  const size_t barycenter_y = acc_y / counter;

答案 1 :(得分:0)

您可以尝试为其创建数组  宽度和高度。然后检查每一行中对象的中间位置(对象的中间位于其中的“1”)并将其放入数组中。和列相同的事情。 创建2个阵列后,您可以通过计算宽度和高度数组的平均值来计算该点。祝你好运