opencv3/C++ 积分图像

计算源图像一个或多个积分图像,如下所示:

 sum(X,Y)=x<X,y<Yimage(x,y)
这里写图片描述
 sqsum(X,Y)=x<X,y<Yimage(x,y)2

 tilted(X,Y)=y<Y,abs(xX+1)Yy1image(x,y)

使用这些积分图像,可以在一个固定的时间内在图像的特定右上方或旋转矩形区域上求和计算平均值和标准偏差,例如:

 x1x<x2,y1y<y2image(x,y)=sum(x2,y2)+sum(x1,y1)sum(x1,y2)sum(x2,y1)

这里写图片描述
在多通道图像的情况下,每个通道的总和独立累加。

OpenCV中利用函数integral()计算图像的积分。
函数integral()参数说明:

void integral( 
InputArray src, //输入图像(8位整型或32或64浮点图)
OutputArray sum,//积分图像(32位整型或32或64浮点图)
OutputArray sqsum,//积分图像像素值的平方
OutputArray tilted,//图像旋转45度的积分
int sdepth = -1, //积分和倾斜积分图像的期望深度(CV_32S、CV_32F、
CV_64F)
int sqdepth = -1 //平方像素值积分图像的期望深度(CV_32F、CV_64F)
);

其中:
输入图像src 为  W×H ,积分图像sum为  (W+1)×(H+1) , 积分图像像素值的平方sqsum为大小  (W+1)×(H+1) 的双精度
浮点(64f)数组;图像旋转45度的积分tilted为  W+1×H+1 大小的数组,数据类型与sum相同。

integral()示例:

#include<opencv2/opencv.hpp>
using namespace cv;

int main()
{
    Mat src, dst;
    src = imread("E:/image/image/daibola.jpg");
    if (src.empty()) {
        printf("could not load image...\n");
        return -1;
    }
    namedWindow("input", CV_WINDOW_AUTOSIZE);
    imshow("input", src);

    Mat sumii = Mat::zeros(src.size(), CV_32FC1);
    Mat sqsumii = Mat::zeros(src.size(), CV_64FC1);
    //计算图像的积分
    integral(src, sumii, sqsumii);
    //规范化
    normalize(sumii, dst, 0, 255, NORM_MINMAX, CV_8UC1, Mat());
    namedWindow("output", CV_WINDOW_AUTOSIZE);
    imshow("output", dst);

    waitKey(0);
    return 0;
}

这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值