目录
积分图像
积分图像(Integral Image)是一种计算机视觉中的图像处理技术,它可以快速地计算图像中某个区域内所有像素的和。积分图像可以用于加速图像特征的计算,如Haar特征和HOG特征等。它的计算速度很快,因为可以通过一次遍历图像就可以计算出所有的积分图像。同时,积分图像还可以用于快速的图像模板匹配和物体检测。
积分图像的求和方式
积分图像求和的方式是通过对原始图像进行积分得到的。具体的求和方式如下:
-
对原始图像进行积分,得到积分图像。积分图像的每个像素值表示该像素及其左上角所有像素的和。(例如P0点的值等于蓝色区域所有像素点的灰度值之和)
-
要计算某个区域内所有像素的和,只需要用该区域右下角的像素的积分图像值减去左上角的积分图像值,再加上左上角左边的积分图像值和右下角下面的积分图像值,即可得到该区域内所有像素的和。(例如P3减去P0即可得到灰色区域的所有像素之和)
-
如果要计算多个不相交的区域的像素和,可以用同样的方法分别计算每个区域的像素和
OpenCV中所用到的API
void QuickDemo::intergral_demo() {
//创建了一个16×16的单通道浮点数型(CV_32FC1)的矩阵image,并设置像素值全为1
Mat image = Mat::ones(16, 16, CV_32FC1);
//创建一个随机噪声
RNG rng(10086);
for (int y = 0;y < image.rows;y++)
{
for (int x = 0;x < image.cols;x++)
{
float d = rng.uniform(-0.5, 0.5);
image.at<float>(y, x) = image.at<float>(y, x)+ d;
}
}
//标准和求积分
Mat sum;
integral(image, sum);
//为了方便显示,转成CV_8U格式
Mat sum8U = Mat_<uchar>(sum);
namedWindow("SUM8U", WINDOW_NORMAL);
imshow("SUM8U", sum8U);
//平方和求积分
Mat sqsum;
integral(image, sum,sqsum);
//为了方便显示,转成CV_8U格式
Mat sqsum8U = Mat_<uchar>(sqsum);
namedWindow("sqSUM8U", WINDOW_NORMAL);
imshow("sqSUM8U", sqsum8U);
//倾斜求和求积分
Mat qxsum;
integral(image, sum, sqsum,qxsum);
//为了方便显示,转成CV_8U格式
Mat qxsum8U = Mat_<uchar>(qxsum);
namedWindow("qxSUM8U", WINDOW_NORMAL);
imshow("qxSUM8U", qxsum8U);
}