opencv之积分图计算

13 篇文章 0 订阅

积分图像计算介绍

图像积分就是某像素点左上角全部图像像素之和,opencv提供算法,可以计算任意一块区域积分和,原理是利用该区域总和减去相邻两块区域和,在加上相邻两块区域的重叠部分(由于多减掉一次)。
在这里插入图片描述

积分图像计算相关API

函数API

void integral( InputArray src, OutputArray sum,OutputArray sqsum, int sdepth = -1, int sqdepth = -1 );

函数参数介绍

  • src:输入图像。
  • sum:计算出来的像素和表。
  • sqsum:计算出来的平方和表。
  • tilted:计算出来的旋转45度(瓦块)和表。
  • sdepth : 默认值-1。和表数据深度常见CV_32S。
  • sqdepth: 默认值 -1。平方和表数据深度常见 CV_32F。

代码演示

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

#define PIC_PATH "/work/opencv_pic/"
#define PIC_NAME "girl.jpeg"

int main(void)
{
 Mat src;

    //获取完整的图片路径及名称
    string pic = string(PIC_PATH)+string(PIC_NAME);

    //打印图片路径
    cout << "pic path is :"<<pic<<endl;

    //读取图片
    src = imread(pic);

    //判断图片是否存在
    if(src.empty())
    {
        cout<<"pic is not exist!!!!"<<endl;
        return -1;
    }

    //显示图片
    namedWindow("src pic",WINDOW_AUTOSIZE);
    imshow("src pic",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 iisum;   //积分图归一化
    normalize(sumii,iisum,0,255,NORM_MINMAX,CV_8UC1,Mat());
    //显示积分图
    imshow("计算结果",iisum);

    waitKey(0);
    destroyAllWindows();
    return 0;
}

程序运行效果

可以看到越靠近左下方的点越亮证明值是越大的
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值