icvConvertToFastHaarFeature
2015-05-28 21:43
302 查看
/* *icvConvertToFastHaarFeature *作用:将haar特征转化为快速haar特征 */ void icvConvertToFastHaarFeature( CvTHaarFeature* haarFeature, //输入数组 CvFastHaarFeature* fastHaarFeature, //输出数组 int size, //size表示数组的大小 int step ) //step表示积分图的row step,一步可以是8位,比如灰度图;一步也可以是24位,比如RGB图 { int i = 0;//表示特征的个数 int j = 0;//表示一个特征里小矩形的个数 for( i = 0; i < size; i++ ) { fastHaarFeature[i].tilted = haarFeature[i].tilted; if( !fastHaarFeature[i].tilted )//当为直立特征 { for( j = 0; j < CV_HAAR_FEATURE_MAX; j++ ) { fastHaarFeature[i].rect[j].weight = haarFeature[i].rect[j].weight; if( fastHaarFeature[i].rect[j].weight == 0.0F ) { break; } //下面是利用宏的定义把普通的特征转化为能快速计算的haar特征 CV_SUM_OFFSETS( fastHaarFeature[i].rect[j].p0, fastHaarFeature[i].rect[j].p1, fastHaarFeature[i].rect[j].p2, fastHaarFeature[i].rect[j].p3, haarFeature[i].rect[j].r, step ) } } else //当为旋转特征时 { for( j = 0; j < CV_HAAR_FEATURE_MAX; j++ ) { fastHaarFeature[i].rect[j].weight = haarFeature[i].rect[j].weight; if( fastHaarFeature[i].rect[j].weight == 0.0F ) { break; } <pre name="code" class="cpp"> CV_TILTED_OFFSETS( fastHaarFeature[i].rect[j].p0, fastHaarFeature[i].rect[j].p1, fastHaarFeature[i].rect[j].p2, fastHaarFeature[i].rect[j].p3, haarFeature[i].rect[j].r, step ) } } } }
//下面是利用宏的定义把普通的旋转特征转化为能快速计算的旋转的haar特征
其中CV_TILTED_OFFSETS为预定义好的一个宏,如下所示:
/* * get sum image offsets for <rect> corner points * step - row step (measured in image pixels!) of sum image */ //CV_SUM_OFFSETS( p0, p1, p2, p3, rect, step )表示一个垂直矩形的四个顶点,其中,以左上角的点为参考点 #define CV_SUM_OFFSETS( p0, p1, p2, p3, rect, step ) \ /* (x, y) */ \ (p0) = (rect).x + (step) * (rect).y; \ /* (x + w, y) */ \ (p1) = (rect).x + (rect).width + (step) * (rect).y; \ /* (x + w, y) */ \ (p2) = (rect).x + (step) * ((rect).y + (rect).height); \ /* (x + w, y + h) */ \ (p3) = (rect).x + (rect).width + (step) * ((rect).y + (rect).height); /* * get tilted image offsets for <rect> corner points * step - row step (measured in image pixels!) of tilted image */ //CV_TILTED_OFFSETS( p0, p1, p2, p3, rect, step ) 表示一个旋转45度矩形的四个顶点,其中以最上面那个点为参考点(x,y) #define CV_TILTED_OFFSETS( p0, p1, p2, p3, rect, step ) \ /* (x, y) */ \ (p0) = (rect).x + (step) * (rect).y; \ /* (x - h, y + h) */ \ (p1) = (rect).x - (rect).height + (step) * ((rect).y + (rect).height);\ /* (x + w, y + w) */ \ (p2) = (rect).x + (rect).width + (step) * ((rect).y + (rect).width); \ /* (x + w - h, y + w + h) */ \ (p3) = (rect).x + (rect).width - (rect).height \ + (step) * ((rect).y + (rect).width + (rect).height);
相关文章推荐
- quartusII综合报错(Error (10133): Verilog HDL Expression error at lcd_display_wsfeng.v(37): illegal part)
- 剑指offer 65 - 滑动窗口的最大值
- JSP三大指令
- CodeForces 547B. Mike and Feet 线段树
- 我是如何从勉强写冒泡成长到轻松get百度offer? (内有许多优质算法书籍介绍及推荐)
- JavaScript-回调函数
- 重启VirtualBox里面的系统提示VT-x features locked or unavailable in MSR错误
- Jquery+artTemplate+layPage 封装datagrid
- Node.js应用场景及发展趋势
- poj3155--Hard Life(最大密度子图)
- html文件转换成pdf和word
- JS魔法堂之实战:纯前端的图片预览
- JavaScript--水平幻灯片
- [转]C# winform与Javascript的相互调用
- Netty那点事(二)Netty中的buffer
- angular 实现modal windows效果(即模态窗口,半透明的遮罩层),以及bootstrap(css,components,js)的初步学习
- menu-普通menu弹出框样式
- CSS3用法理解
- jsp+js实现二级级联
- POJ 2492 A Bug's Life (并查集)