博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【AdaBoost算法】积分图代码实现
阅读量:6432 次
发布时间:2019-06-23

本文共 2960 字,大约阅读时间需要 9 分钟。

积分图介绍

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

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

二、代码实现

 

#include 
#include
#include
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~

 

转载于:https://www.cnblogs.com/chenpi/p/5128231.html

你可能感兴趣的文章
修改TrustedInstaller权限文件(无法删除文件)
查看>>
windows 2008下无法改变文件(文件夹)权限时,可以看一下其所有者
查看>>
Python的系统管理_04_python_函数
查看>>
linux 修改计算机名
查看>>
在Windows Server 2008 R2中禁用 IPv6
查看>>
测试空间支持htaccess伪静态方法
查看>>
jquery特效弹出框
查看>>
Redis中7种集合类型应用场景
查看>>
Unity开发IOS游戏的优化建议
查看>>
我的友情链接
查看>>
linux系统时间同步关闭防火墙及阿里NTP地址
查看>>
2950交换机SI与EI区别
查看>>
Java 数据类型
查看>>
U大师U盘装系统——安装ghost系统教程(V1.2.0版)
查看>>
webpack.config.js 参数详解
查看>>
FALog
查看>>
Farpoint Spread 常用属性
查看>>
ciscocatalyst6500引擎内存与flash经典
查看>>
JVM性能优化
查看>>
Facebook Haystack图片存储架构
查看>>