Skip to content

Instantly share code, notes, and snippets.

@jiyeqian
Last active August 29, 2015 14:00
Show Gist options
  • Save jiyeqian/11240408 to your computer and use it in GitHub Desktop.
Save jiyeqian/11240408 to your computer and use it in GitHub Desktop.
/*
修改积分图的计算逻辑,可以更有利于并行化:
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