积分图介绍

定义:图像左上方的像素点值的和;

在Adaboost算法中可用于加速计算Haar或MB-LBP特征值,如下图:

二、代码实现

#include <opencv/highgui.h>
#include <opencv/cv.h>
#include <opencv2/imgproc/imgproc_c.h>using namespace cv;int calcIntImage(unsigned char *pucSrcImage, unsigned int *pucDstImage, int width, int height);int main(int argv, char **argc)
{IplImage *pstImage = cvLoadImage("D:\\test01.JPG", CV_LOAD_IMAGE_COLOR);IplImage *pstYUVImage = cvCreateImage(cvSize(pstImage->width, pstImage->height), IPL_DEPTH_8U, 3);unsigned char *pucImage = (unsigned char*)malloc(pstImage->width * pstImage->height * sizeof(unsigned char));unsigned int *puiIntImage = (unsigned int*)malloc((pstImage->width + 1) * (pstImage->height + 1) * sizeof(unsigned int));cvCvtColor(pstImage, pstYUVImage, CV_BGR2YUV);for(int i = 0; i < pstImage->width * pstImage->height; i++){//提取Y分量pucImage[i] = pstYUVImage->imageData[i*3];}/* 计算积分图 */calcIntImage(pucImage, puiIntImage, pstImage->width, pstImage->height);/* 测试代码,测试是否计算正确 */for(int i = 0; i < 5; i++){for(int j = 0; j < 5; j++){printf("%d ", (int)(pucImage[i*pstImage->width + j]));}printf("\n");}printf("\n");for(int i = 0; i < 6; i++){for(int j = 0; j < 6; j++){printf("%4d ", (int)(puiIntImage[i*(pstImage->width + 1) + j]));}printf("\n");}/* 测试代码结束 */cvShowImage("Win", pstImage);cvWaitKey(0);cvReleaseImage(&pstImage);cvReleaseImage(&pstYUVImage);if(NULL != pucImage){free(pucImage);pucImage = NULL;}if(NULL != puiIntImage){free(puiIntImage);puiIntImage = NULL;}return 0;
}int calcIntImage(unsigned char *pucSrcImage, unsigned int *puiDstImage, int width, int height)
{int i= 0, j = 0, sum = 0;int iIntImageWidth = width + 1;int iIntImageHeight = height + 1;unsigned char *pucSrcImageTmp;unsigned int *puiDstImageTmp;pucSrcImageTmp = pucSrcImage;/* 存储每列的和 */unsigned int *puiImageRow = (unsigned int *)malloc(width * sizeof(unsigned int));memset(puiImageRow, 0, width * sizeof(unsigned int));puiDstImageTmp = puiDstImage;/* 积分图第一行清0 */memset(puiDstImageTmp, 0, iIntImageWidth);puiDstImageTmp += iIntImageWidth;/* 积分图第一列清0 */for(i = 0; i < height; i++){*puiDstImageTmp = 0;puiDstImageTmp += iIntImageWidth;}puiDstImageTmp = puiDstImage + iIntImageWidth;/* 开始计算积分图 */for(i = 0; i < height; i++){for(j = 0; j < width; j++){puiImageRow[j] += pucSrcImageTmp[j];puiDstImageTmp[j+1] = puiDstImageTmp[j] + puiImageRow[j];}puiDstImageTmp += iIntImageWidth;pucSrcImageTmp += width;}if(NULL != puiImageRow){free(puiImageRow);puiImageRow = NULL;}return 0;
}

三、计算结果

如下图,结果OK~

【AdaBoost算法】积分图代码实现相关推荐

  1. 图像处理之积分图应用三(基于NCC快速相似度匹配算法)

    from:https://blog.csdn.net/jia20003/article/details/53021614 图像处理之积分图应用三(基于NCC快速相似度匹配算法) 基于Normalize ...

  2. NML(Non-Local Mean)非局部平均算法 完全解析与积分图加速 (附代码)

    最近开始学习在Denoise方面的内容,在这方面比较重要的传统算法当然是BM3D这种到目前比较fancy的,效果也是目前最好的算法.但是BM3D的一个致命缺点就是速度很慢,所以BM3D我们以后再说吧, ...

  3. 程序员的机器学习入门笔记(九):人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联

    一.Haar分类器的前世今生 人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸检测也逐渐作为一个单独的研究方向发 ...

  4. Adaboost算法原理以及matlab代码实现(超详细)

    一.AdaBoost简介 Boosting, 也称为增强学习或提升法,是一种重要的集成学习技术, 能够将预测精度仅比随机猜度略高的弱学习器增强为预测精度高的强学习器,这在直接构造强学习器非常困难的情况 ...

  5. Adaboost算法原理分析和实例+代码(简明易懂)

    Adaboost算法原理分析和实例+代码(简明易懂) [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333   ...

  6. Adaboost算法原理分析和实例+代码(转载)

    [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333     本人最初了解AdaBoost算法着实是花了几天时 ...

  7. 图像处理之积分图应用二(快速边缘保留滤波算法)

    图像处理之积分图应用二(快速边缘保留滤波算法) 一:基本原理 传统的图像边缘保留滤波算法-如高斯双边模糊.Mean-Shift模糊等计算复杂.效率比较低,虽然有各种手段优化或者快速计算方法,当时算法相 ...

  8. 人脸检测:经典的VJ人脸检测器(类Harr特征,积分图加速法,级联的Adaboost强分类器)

    著名的VJ人脸检测算法就是一种基于Adaboost分类器的方法.该检测器由Paul Viola和Michael Jones在2001年的 Robust Real-Time Face Detection ...

  9. Adaboost 人脸检测:Haar特征及积分图、分类器的级联

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 人脸识别功能实现的原理介绍与算法介绍 人脸识别:人脸数据集 A ...

最新文章

  1. graphpad怎么处理cck8的_Graphpad Prism 的 4 个隐藏技能助你轻松发表 SCI
  2. 简单Unity时间架构设计(克洛诺斯之匙)
  3. python 语言教程(3)变量之字符串
  4. 修改TOMCAT的JVM虚拟机内存大小几种方式
  5. python 环境管理工具_python3环境管理器
  6. ps2019布尔运算快捷键_超实用:换个角度教你快速理解PS CS6布尔运算
  7. js- 引用和复制(传值和传址)
  8. 在矩池云中保存Conda环境
  9. 大数据项目实战数仓4——总纲
  10. vue多html标签,Vue实现多标签选择器
  11. lisp函数大全 微盘_LISP函数大全
  12. android Tbs腾讯X5内核初始化失败
  13. Tcl语言入门(一)基本知识
  14. 如何做好企业绩效管理?
  15. 38年来,NBA最有价值球员|数据分析
  16. 《Essential C++》学习笔记 第三章:泛型编程风格(一)
  17. 中国计算机专业的大学生相比于美国差在哪里?
  18. dsf5.0修改不了头像
  19. 1GB等于多少MB?
  20. NB,用这一篇文章带你了解什么是爬虫?

热门文章

  1. JQuery的Ajax跨域请求的解决方案
  2. laravel 跨域解决方案
  3. MySQL在并发场景下的问题及解决思路
  4. ajax获取数据中文乱码问题最简单的完美解决方案
  5. HTML输入=“文件”接受属性文件类型(CSV)
  6. 监管大屏系统_“警视” 警务情指一体大屏可视化决策系统
  7. 华为智慧屏云会议怎么操作_会议室预定系统有哪些?怎么操作
  8. stm32移植paho_如何在STM32上移植Linux?超详细的实操经验分享
  9. 如何配置Mybatis?(详解)
  10. Unity PointCloud开发:Mesh渲染点云