接触到积分图像,对于cvIntegral函数得到的结果有点疑惑,为什么W*H的图像的积分图像是(W+1)*(H+1)呢?做了个简单的实验如下:
我设置了一个2*2的CvMat:
然后,调用cvIntegral计算积分图像,得到的结果如下:
从结果中发现,第一行与第一列都是0, 真正对我们有缘的数据是从第一行和第一列开始的,这也是我们理解的积分图像应该得到的结果。回头看一下cvIntegral的文档介绍,就会发现为什么积分图的宽与高会增加1,且第一行与第一列都是0.
而对于opencv来说,X,Y都是从0开始的,显然,当X==0||Y==0时,{(x,y)|x<X,y<Y}是空集, 我没有去看源码,但是从上面的结果应该可以猜测出,当X==0||Y==0时,就将sum(X,Y)置0了。
opencv这样做对于某些操作的确有所简化,但是,其实没有什么太大的好处。至于这么做是否有其本质上的原因,就不得而知了,还希望知情人不吝赐教