【opencv学习笔记】积分图

1、 前言

积分图(integral image),是一种在图像中快速计算矩形区域和的方法。它可以在短时间内计算图像中任意大小矩形区域内像素的和。这样在图像模糊、边缘提取、对象检测的时候极大降低计算量、提高计算速度。

2、原理

积分图中任意一点(x,y)的值等于灰度图的左上角与当前点所围成的矩形区域内所有像素点灰度值之和。
【opencv学习笔记】积分图_第1张图片快速计算方法:
【opencv学习笔记】积分图_第2张图片

3、函数说明

【opencv学习笔记】积分图_第3张图片4、参数详解

  • 第一个参数,InputArray src,输入图像为W×H,8位或浮点(32F或64F);
  • 第二个参数,OutputArray sum,积分图像大小为(W+1)×(H+1),32位整数或浮点(32F或64F);
  • 第三个参数,OutputArray sqsum,平方像素值积分图像,为(W+1)×(H+1)双精度浮点(64F)阵列;
  • 第四个参数,OutputArray tilted,图像积分旋转45°,大小啊为(W+1)×(H+1)阵,数据类型与和函数参数sum相同;
  • 第五个参数,int sdepth = -1,所需积分深度和倾斜积分图像,一般为CV_32S,CV_32F,或CV_64F;
  • 第六个参数,int sqdepth = -1,所需的平方像素值积分图像的深度,一般为CV_32F或CV_64F;

4、代码展示

# include<opencv2\opencv.hpp>
# include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
	Mat src, dst;
	src = imread("E:/tuku/lang.jpg",IMREAD_GRAYSCALE);
	if (src.empty()) {
		cout << "can't find this picture...";
		return -1;
	}
	imshow("input", src);
	Mat sumii = Mat::zeros(src.rows + 1, src.cols + 1, CV_32FC1);
	Mat sqsumii = Mat::zeros(src.rows + 1, src.cols + 1, CV_64FC1);
	integral(src, sumii, sqsumii);
	Mat Reslut_Image;
	//归一化处理
	normalize(sumii, Reslut_Image, 0, 255, NORM_MINMAX, CV_8UC1, Mat());
	imshow("out put", Reslut_Image);
	waitKey(0);
	return 0;
}

效果图

【opencv学习笔记】积分图_第4张图片

你可能感兴趣的:(opencv)