0

ippiGetRotateTransformnppiRotate都采用 x 和 y 移位参数,但我不确定它们是如何工作的。IPP 和 NPP 都围绕 (0, 0) 旋转,然后移动结果。这个例子展示了使用ippiGetRotateShift围绕中心旋转,但没有解释它是如何使用的。

示例的相关部分:

Ipp8u src[4*4] = ...;
Ipp8u dst[6*6];
double xShift;
double yShift;
double xShiftTmp;
double yShiftTmp;
double xCenterSrc = 2.0;  
double yCenterSrc = 2.0; 
double xCenterDst = 3.5;
double yCenterDst = 2.5;
double angle = 35.0;
ippiGetRotateShift ( xCenterSrc, yCenterSrc, angle, &xShift, &yShift );
/* xShift = -0.79 , yShift = 1.51 */
ippiGetRotateShift ( 1.0, 1.0, angle, &xShiftTmp, &yShiftTmp);
xShift += xShiftTmp; yShift += yShiftTmp; 
/* xShift = -1.18, yShift = 2.26 */
xShift += xCenterDst - xCenterSrc;
yShift += yCenterDst - yCenterSrc;
/* xShift = 0.32, yShift = 2.76 */

该示例记录了值更改为的内容,但没有记录更改方式或原因。甚至目的地中心点也无法解释。为什么是 (3.5, 2.5) 而不是 (3, 3)?

无论如何,x 和 y 位移参数的行为似乎相同。我如何在不依赖 IPP 的情况下为 NPP 计算它们?

4

1 回答 1

1

好了,算了算了。旋转后似乎ippiGetRotateShift返回了 P 和 P' 的差异。(P'.x = x - x cos(-angle) - y sin(-angle); P'.y = y cos(-angle) + x sin(-angle))。

于 2019-03-05T18:50:40.417 回答