C++中在利用OpenCV实现积分图计算

这篇文章将为大家详细讲解有关C++中在利用 OpenCV实现积分图计算,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、网站建设、增城网络推广、小程序制作、增城网络营销、增城企业策划、增城品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供增城建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com

如何使用积分图像

假设一幅图像中4个点ABCD,其积分图像中A(x1,y1)点的值为其左上侧所有像素的值的累加和,也就是蓝色区域中所有像素点的值累加和。同理积分图像中的B(x2,y1)、C(x1,y2)、D(x2,y2)点值分别是绿色、紫色和黄色区域像素值的累加和。ABCD四点的位置关系在右下角图所示。

C++中在利用 OpenCV实现积分图计算

那么如果需要计算由ABCD组成的ROI的累加值就只需要使用如下公式:

C++中在利用 OpenCV实现积分图计算

即:D-C-B+A。显然,计算量不受区域尺寸的影响。所以,如果需要在多个尺寸的区域上计算像素累加和,最好采用积分图像。


积分图像的API

  • void integral(InputArray image,OutputArray sum, int sdepth=-1 )

  • void integral(InputArray image,OutputArray sum, OutputArray sqsum, int sdepth=-1 )

  • void integral(InputArray image,OutputArray sum, OutputArray sqsum, OutputArray tilted,int sdepth=-1 )

函数参数:

  • image  输入W×H源图像,8bit字符型,或32bit、64bit浮点型矩阵

  • sum    输出(W+1)×(H +1)积分图像,32bit整型或32bit、64bit浮点型矩阵

  • sqsum  输出(W+1)×(H +1)平方积分图像,双精度浮点型矩阵。

  • tilted    输出旋转45°的(W+1)×(H +1)积分图像,数据类型同sum

  • sdepth  积分图像sum或titled的位深度:CV_32S、CV_32F或CV_64F


注:上面计算出来的图像必须row和col加1,因为边缘也要计算,如果不加一也会报错。

代码演示

我们再新建一个项目名为opencv--integral,按照配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法

C++中在利用 OpenCV实现积分图计算

计算积分图

C++中在利用 OpenCV实现积分图计算

注意的就是上面创建sumii和sqsumii的时候要记得是源图像的宽和高度都+1;

在显示的前的图像我们要进行normlize归一化的处理

C++中在利用 OpenCV实现积分图计算

     归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数据处理的方便,其次是保证程序运行时收敛加快。归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在某个区间上是统计的坐标分布。归一化有同一、统一和合一的意思。

    归一化的目的简而言之,是使得没有可比性的数据变得具有可比性,同时又保持相比较的两个数据之间的相对关系,如大小关系;或是为了作图,原来很难在一张图上作出来,归一化后就可以很方便的给出图上的相对位置等。

关于C++中在利用 OpenCV实现积分图计算就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


分享标题:C++中在利用OpenCV实现积分图计算
文章来源:http://ybzwz.com/article/gpccss.html