Java图像处理曲线 - 弯曲图像

时间:2018-03-13 12:40:18

标签: java javax.imageio

我有两张照片 杯子的第一张图片 - >
Paper cup

第二个图像是我想要围绕杯子的标签(这个图像只是一个例子,实际的应用程序适用于动态图像)。

Cup lable

我计划多次剪切标签图像并将其放在杯子上,因此从不同角度创建36个jpegs,我将使用360浏览器在我的网站上显示结果。< / p>

到目前为止,我设法拍摄了一个标签图像的梯形区域来创建它 (代码为here

enter image description here

最后一步是创建它(使用GIMP - 使用扭曲 - >曲线弯曲) enter image description here

谢谢

2 个答案:

答案 0 :(得分:0)

我想到的是一种称为uv-mapping的技术。 请参阅https://en.wikipedia.org/wiki/UV_mapping作为起点。

另见J3D - How to use a UV mapping of an object to convert 2D coordinates to 3D ones

答案 1 :(得分:0)

我已经成功完成了一些工作。 起初,我使用ImageMagick,它需要50秒才能生成36张图像......这对我来说很长。 所以我转向Java,我已经设法使用一个像素的简单转换进行简单转换并应用Sin函数

for(int y = 0; y < bounds.height ; y++)
                {
                    for (int x = 0; x < bounds.width ; x++) {
                        int pixelRGB = img.getRGB(x, y);
                        int newX = x;
                        int newY = ((int)(Math.sin(x*Math.PI/bounds.width) * 40 )) + y  ;
                        newImg.setRGB(newX, newY, pixelRGB);            
                    }
                }

主线是 - &gt; (Math.sin(x * Math.PI / bounds.width)* 40)+ y

  • Math.PI / bounds.width - &gt;确保我只从Sin函数中得到Y的正值。
  • bounds.width - 是原始图像宽度,对于Sin函数,它告诉从0,0开始转到正Y值并且与X轴相交,返回bounds.width。
  • 40 - &gt;是你想要使用的曲率水平
  • y - 只是Y轴偏移。如果没有应用,你将在目标图像中获得一行