integral函数
计算积分图像
C++: void integral(InputArray src, OutputArray sum, int sdepth=-1 )
c语言:void cvIntegral( const CvArr* image, CvArr* sum, CvArr* sqsum=NULL, CvArr* tilted_sum=NULL );
函数 cvIntegral 计算一次或高次积分图像:
sum(X,Y) = | ∑ | image(x,y) |
x < X,y < Y |
sqsum(X,Y) = | ∑ | image(x,y)2 |
x < X,y < Y |
tilted_sum(X,Y) = | ∑ | image(x,y) |
y < Y, | x − X | < y |
利用积分图像,可以计算在某象素的上-右方的或者旋转的矩形区域中进行求和、求均值以及标准方差的计算,并且保证运算的复杂度为O(1)。例如:
因此可以在变化的窗口内做快速平滑或窗口相关等操作。
opencv代码:
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream> #include<cv.h> #include<stdlib.h> using namespace cv; using namespace std; int main() { Mat src, dst; src = imread("D:6.jpg"); /*Mat kx = (Mat_<float>(1, 3) << 0,-1,0); Mat ky = (Mat_<float>(1, 3) << -1,0, -1); sepFilter2D(src, dst, src.depth(),kx,ky,Point(-1,-1),0,BORDER_DEFAULT );*/ cvtColor(src, src, CV_RGB2GRAY); integral(src, dst, CV_32FC1); imshow("shiyan", dst); waitKey(0); return 0; }