积分图的概念最初是由Paul Viola和Michael Jones在2001年提出的,在他们的论文“Rapid Object Detection using a Boosted Cascade of Simple Features”中,积分图被当作一种新的图像特征表征方式,可以把检测的Haar特征非常高效的计算出来,用于实时人脸检测系统。

积分图是一种能够描述全局信息的矩阵表示方法,其构造方式是积分图像上位置(i,j)处的值ii(i,j)是原图像(i,j)左上角方向所有像素的和。

利用积分图可以可以快速的计算图像上某一区域内的像素和,如下图:

要计算区域D内的像素和,只需要获取到积分图上1、2、3/4点各自的像素值,分别表述为ii(1)、ii(2)、ii(3)、ii(4),则区域D的像素和=ii(4)+ii(1)-ii(2)-ii(3)。

传统的计算像素和的方式需要遍历区域D内所有的像素,再执行累加,计算量随着区域D面积的增大而增大,而对积分图方式来说,只需要在计算积分图之后,通过简单几次加减运算就可以得到某一区域内“像素和”这一特征,计算速度非常快,并且这种速度的提升效果随着区域面积的增大和计算次数的增多表现的更为明显。

Opencv中使用integral函数计算积分图。

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

第一个参数src,可以使灰度图或RGB彩色图,单通道和三通道均可作为输入,但每个通道的精度必须是8位int或32位、64位浮点型;

第二个参数sum,积分图,若输入src是灰度图,则积分图也是灰度图,若输入src是RGB三通道图,则积分图sum也是RGB三通道彩色。sum的图像深度是32位整型或32位、64位浮点型,这取决于第三个参数sdepth的定义;

第三个参数sdepth,定义积分图的深度(depth),32位整型或者32位、64位浮点型。注意图像的深度跟图像的通道数是无关的,相关概念可以参看这里:Opencv Mat矩阵中data、size、depth、elemSize、step等属性的理解 ;

所以在使用sum之前,声明即可,可以不事先定义Mat矩阵的大小和数据类型。

#include "highgui/highgui.hpp"

#include "imgproc/imgproc.hpp"

using namespace cv;

int main(int argc,char *argv[])

{

Mat image=imread(argv[1]);

//cvtColor(image,image,CV_RGB2GRAY); //原图像是三通道,积分图也是三通道

Mat imageIntegral;

integral(image,imageIntegral,CV_32F); //计算积分图

normalize(imageIntegral,imageIntegral,0,255,CV_MINMAX); //归一化,方便显示

Mat imageIntegralNorm;

convertScaleAbs(imageIntegral,imageIntegralNorm); //精度转换为8位int整型

imshow("Source Image",image);

imshow("Integral Image",imageIntegralNorm);

waitKey();

}

原图:

积分图:

显示的积分图是经过归一化后的。可以看到从左上角到右下角,图像是越来越亮的,也就是说积分图上像素值是越来越大的。

积分图的图像通道数跟原始图像保存一致,当计算积分图的原始图像是彩色图像时,积分图也是彩色图像,这时候积分图计算的不是灰度,而是颜色:

图像积分图 c语言,Opencv中integral计算积分图相关推荐

  1. imfilter c语言,opencv中cvFilter2D( ) 函数filter2D()函数与MATLAB中imfilter()函数的差异...

    出处: 1:cvFilter2D() 函数为opencv中c语言函数 2:filter2D()函数为opencv中c++函数 3:imfilter()函数为matlab版本函数 计算结果的异同: 2( ...

  2. pca算法 c语言,Opencv中的pca算法

    对于PCA,一直都是有个概念,没有实际使用过,今天终于实际使用了一把,发现PCA还是挺神奇的. 在OPENCV中使用PCA非常简单,只要几条语句就可以了. 1.初始化数据 //每一行表示一个样本 Cv ...

  3. 在OpenCV中利用卷积进行图像滤波

    简 介: 本文首先讨论了卷积核的概念,以及如何用于对图像进行滤波.然后通过他们对图像进行数学运算来实现特定的效果,比如平和和锐化.展示了如何在OpenCV中实现2D滤波. 在等同卷积卷积核之后,我们创 ...

  4. OpenCV中图像特征提取与描述

    目录 图像特征提取与描述 图像的特征 Harris和Shi-Tomas算法 Harris角点检测 Shi-Tomasi角点检测 小结 SIFT/SURF算法 SIFT原理 基本流程 尺度空间极值检测 ...

  5. OpenCV中图像形态学操作

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:视学算法 图像形态学是图像处理的分支学科,在二值图像处理 ...

  6. 使用opencv中的merge()函数为BGR图像添加alpha通道

    先上代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # 图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 # 图像处理 ...

  7. OpenCV中图像的BGR格式 Img对象的属性说明

    1. 图像的BGR格式说明 OpenCV中图像读入的数据格式是numpy的ndarray数据格式.是BGR格式,取值范围是[0,255]. 如下图所示,分为三个维度: 第一维度:Height 高度,对 ...

  8. OpenCV中图像轮廓检测

    OpenCV中图像轮廓检测 通过之前的Canny方法可以得到图像的边界,但是我们无法得到边界的数学信息.所以就有了今天的图像轮廓检测. 在OpenCV中图像轮廓检测的API: findContours ...

  9. 第四章:OpenCV中的图像处理

    第四章:OpenCV中的图像处理 本章节你将学习图像的改变色彩空间.提取对象.图像的几何变换.图像的阈值.平滑图像等OpenCV图像处理的基本内容. 更多内容请关注我的GitHub库:TonyStar ...

最新文章

  1. 计算机C语言常用语句,计算机二级C语言考试常见知识积累
  2. [html] html5点击返回键怎样不让它返回上一页?
  3. mysql中怎么实现Apriori_关联规则算法Apriori的学习与实现
  4. 【ABAP系列】SAP ABAP 总结常用术语简称解析
  5. (转)如何在windows 2008 安装IIS
  6. 今天看C++Primer发现的问题
  7. Qt视频直播软件--项目实战(Day8)
  8. 数据结构 基于字符串模式匹配算法的病毒感染检测问题
  9. 碗中有米,心中有他,他解决的不只是吃饭问题......
  10. 我的世界服务器无限繁殖,村民无限繁殖!我的世界自制超速繁殖机
  11. 双机热备——上下层交换机负载分担
  12. 夏雨老师:告诉你常见颜色对人心理上的影响
  13. 建设工程法规专科【4】
  14. Webstorm2018激活和汉化详细步骤
  15. JavaScript从入门到摔门(2万字超详细的JS知识)
  16. Anaconda3 安装教程
  17. 【Week9作业 B】东东学打牌【模拟】
  18. 笔记-高通处理器的备份还原QCN的一点个人分享
  19. t6修改服务器ip,用友t6服务器更换ip地址
  20. 1.5编程基础之循环控制 8. 多边形内角和

热门文章

  1. 应用程序正常初始化(0x0000135)失败的解决方案
  2. Java八股整理--java基础
  3. ROC-RK3566-PC使用10.1寸IPS触摸屏显示
  4. 游戏本电脑性价比排行2020 最值得入手的游戏本竟是TA
  5. MapReduce实战之找博客共同好友案例
  6. layui 鼠标移动到单元格显示tips(layer.tips)
  7. 企业Exchange邮件服务器搭建实例
  8. grid网格布局基础(二)
  9. java中exists是什么_JAVA:sql中exists的用法
  10. 中国程序员开源的自动“抢茅台”脚本火爆全网!