叹息我很抱歉地说我在我正在处理的一些图像处理代码中使用英特尔 IPL(图像处理库)。这是我努力让图像正确旋转的故事。
- 我有一个源图像。它的大小(w, h)不一定是正方形。
- 它将旋转角度theta。
- 我已经计算了适合大小为(w, h)的图像旋转角度theta所需的输出大小。这个大小是(dw, dh)。我已经分配了一个具有该大小的目标缓冲区。
- 我想通过围绕源图像中心(w/2,h/2)的角度theta旋转源图像,并使旋转后的图像在我的目标缓冲区中居中。
iplRotate () 采用 2 个移位参数xShift和yShift,它们表示执行旋转后图像应沿 x 和 y 轴移动的距离。
问题是我无法让 iplRotate 在目标图像中居中旋转图像。它总是偏离中心。
我对 xShift 和 yShift应该是什么的最佳猜测如下:
- xShift = dw - w
- yShift = dh - h
但这不起作用,我不确定还有什么可以计算xShift和yShift。有人对如何使用 iplRotate 做我想做的事有任何建议吗?
最后一点信息: 我尝试使用 iplGetRotateShift() 再次计算 xShift 和 yShift,但无济于事。我想这会起作用:
iplGetRotateShift(dw / 2.0, dh / 2.0, theta, &xShift, &yShift);
但事实并非如此。
编辑: 我使用 Intel IPP 6.0 而不是 IPL 重写了代码,我看到了相同的错误结果。我无法想象英特尔在 2 个不同的库中轮换错误,所以我一定做错了什么。
编辑: 我尝试了 Dani van der Meer 建议的以下(IPP)代码:
xShift = (dw - w) / 2.0;
yShift = (dh - h) / 2.0;
ippiAddRotateShift(w / 2.0, h / 2.0, angle, &xShift, &yShift);
不幸的是,仍然没有运气。那也不行。