Last active
August 29, 2015 14:00
-
-
Save jiyeqian/11240408 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
修改积分图的计算逻辑,可以更有利于并行化: | |
1. 行积分图:先按行从左至右计算“原图”每行的积分图; | |
2. 列积分图:再按列从上至下计算“行积分图”每列的积分图,即为所求积分图。 | |
计算结果与OpenCV一致,_src为CV_8UC1,_sum为_CV_32SC1。 | |
*/ | |
void parallel_integral(CvMat *_src, CvMat *_sum) | |
{ | |
unsigned char *src, *src_shift; | |
int *sum, *sum_shift; | |
src = _src->data.ptr; | |
sum = (int *)_sum->data.ptr + _sum->cols + 1; | |
// 原图的行积分图 | |
for (int i = 0; i < _src->rows; ++i) { | |
src_shift = src + i * _src->cols; | |
sum_shift = sum + i * _sum->cols; | |
sum_shift[-1] = 0; | |
for (int j = 0; j < _src->cols; ++j) { | |
sum_shift[j] = sum_shift[j - 1] + src_shift[j]; | |
} | |
} | |
// 行积分图的列积分图 | |
for (int i = 0; i < _sum->cols; ++i) { | |
sum_shift = sum + _sum->cols + i; | |
for (int j = 0; j < _sum->rows - 1; ++j, | |
sum_shift += _sum->cols) { | |
sum_shift[0] += sum_shift[-_sum->cols]; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment