gpt4 book ai didi

c++ - 图像数据矩阵中的偏移值及其对整数值的影响

转载 作者:太空宇宙 更新时间:2023-11-04 08:33:25 29 4
gpt4 key购买 nike

目前我正在尝试了解 OpenCV 的人脸检测 API DetectionBasedTracker。在代码里面,我找到了定义

#define CALC_SUM_(p0, p1, p2, p3, offset) \
((p0)[offset] - (p1)[offset] - (p2)[offset] + (p3)[offset])

我无法弄清楚以下内容

(1)p0、p1、p2、p3 是整数值。 (p0)[offset] 的返回值是什么,它有什么作用?

(2)offset实际上是图像矩阵一行中整数的个数。假设图像矩阵是 480 x 640。一行图像数据中有 640 个整数值。对于第二行,offset = 640。它的计算公式为 offset = pt.y * ((int)image.step/sizeof(int)) + pt.x;通过改变偏移值(p0)[offset]是如何起作用的?

最佳答案

我的猜测是 p0 不是整数,而是一维数组。

如果这是正确的,宏将计算 offset 的“总和”数组中的第 th 项 p0 , p1 , p2 , 和 p3 , 除了因为所有这些 - 而这是一个奇怪的总和迹象。

已编辑:现在已查看相关代码

我发现代码很难理解,但我们还是试试吧:

我的结论是p0[offset]是指向图像中像素的指针(整数值)。该像素是图像中矩形的一个角。 p1[offset] , p2[offset] , 和 p3[offset]是指向同一矩形其他角上的像素的指针。

更详细...

CALC_SUM_CALC_SUM 调用在很多地方都被调用,比如在HaarEvaluator::Feature :: calc .

在那calc功能,CALC_SUMp[0] 调用作为论据。 pstruct Feature 中定义作为const int* p[RECT_NUM][4] , 所以 p[0]是指向 int 的四个指针的数组

这四个可能是什么int是吗?好吧,在 Feature 之后它们是未定义的调用构造函数,因为指针设置为 NULL。

但假设 HaarEvaluator::Feature :: updatePtrs在某个时候被调用,指针由 CV_TILTED_PTRS 更新或 CV_SUM_PTRS宏。

这两个宏都带有一个指向值的矩阵的指针,我假设它是图像中的像素矩阵(给定手头的任务,即在图像中查找特征) .该指针称为 titledsum .让我们一起工作 sum . p[0]中的四个指针由 CV_SUM_PTRS 设置指向 sum 内矩形的四个角.

calc调用函数时,四个指针( p[0] 包含四个指向角的指针 p[0][0] - p[0][3] )与偏移量一起传入。这个偏移量被有效地添加到四个指针中的每一个,使用数组符号,移动图像周围的矩形。

实际总和看起来像是在进行描述的快速计算 here .

关于c++ - 图像数据矩阵中的偏移值及其对整数值的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27285068/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com