OpenCV之图像特征提取与检测(十二) 积分图计算

积分图:将图像中任意一点的像素值变成其左上角所有像素值的总和(包含其自身像素值),得出的图像就叫积分图。通过积分图像,可以加快计算速度。

举例:
这里写图片描述

求图像中任意大小区域的积分图像:
这里写图片描述
ii 表示 integral image

void integral( // 积分图计算
    InputArray src, // 输入图像,灰度图
    OutputArray sum, // 求和,输出的尺寸比原图行列都要加1 , 不想行列变化的,自己实现积分图算法
    OutputArray sqsum, // 求和的平方,输出的尺寸比原图行列都要加1
    OutputArray tilted, // 旋转45°的积分图
    int sdepth = -1, 
    int sqdepth = -1 
);

这里写图片描述

代码

    #include "../common/common.hpp"

    void main(int argc, char** argv)
    {
        Mat src = imread(getCVImagesPath ("images/test1_3.png"), IMREAD_GRAYSCALE);
        imshow("src-18", 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 iiResult;
        normalize(sumii, iiResult, 0, 255, NORM_MINMAX, CV_8UC1, Mat()); // 归一化显示
        imshow("sumii", iiResult);
        Mat sqiiResult;
        normalize(sqsumii, sqiiResult, 0, 255, NORM_MINMAX, CV_8UC1, Mat());
        imshow("sqsumii", sqiiResult);

        waitKey(0);
    }

效果图

这里写图片描述

猜你喜欢

转载自blog.csdn.net/huanghuangjin/article/details/81282786