【发布时间】:2009-05-15 21:07:06
【问题描述】:
sigh 很抱歉,我正在处理一些图像处理代码中使用英特尔 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);
不幸的是,仍然没有运气。那也不行。
【问题讨论】:
-
我不清楚究竟你想做什么。您想将源图像围绕其原点 (0,0) 旋转某个角度 theta,然后将旋转后的图像置于目标图像的中心?或者,您是否要围绕源图像的中心(w/2、h/2)旋转源图像,然后将其置于目标图像的中心?
-
@jd141,第二个 - 我想围绕源图像的中心(w/2,h/2)旋转源图像,然后将其置于目标图像的中心。 IPL 的文档让我相信这是可能的。
标签: c++ windows image-processing intel-ipp