我想在一个位置为+30-30的区间内为矩阵的每个元素求和。更确切地说,假设我有一个元素a [i] [j],我喜欢将所有元素的总和 a [i] [j - 30] + a [i] [j - 29] + a [i] [j - 28] + ..... + a [i] [j + 28] + a [i] [j + 29] + a [i] [j + 30; 我还计算了矩阵的积分图像,这样我就可以通过公式A + D - C - D轻松有效地求和。 在这里你可以看到它的工作原理 http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html#integral 我的问题是如何使用已经计算的积分图像有效地求和。还是有另一种有效的方法吗?
感谢您的时间!
P.S。我知道我可以计算前30个元素的总和,并且在每个步骤中添加和减去1个元素 - 从前面添加一个元素并从底部减去一个元素。但我想知道我能否做得更快
答案 0 :(得分:1)
通过使用积分图像,您可以得到给定矩形中值的总和,如(来自维基百科):
您只需要为A,B,C,D设置正确的值。
Mat1f I; // your integral image
// for each i,j (check boundaries!)
int radius = 30;
float A = I[i-1][j-radius-1];
float B = I[i-1][j+radius];
float C = I[i][j-radius-1];
float D = I[i][j + radius];
float sum = D - B - C + A;