【问题标题】:Tracking Pixels After Rotating Using AffineTransform使用 AffineTransform 旋转后跟踪像素
【发布时间】:2016-06-17 19:16:49
【问题描述】:

我正在使用名为“img”的 BufferedImage 并使用仿射变换函数将其旋转 Pi/2 弧度。下面是上面描述的代码:

BufferedImage img = ImageIO.read(new File(filePath));

AffineTransform tx = new AffineTransform();
tx.rotate(3.14/2, img.getWidth() / 2, img.getHeight() / 2);

AffineTransformOp op = new AffineTransformOp(tx,
AffineTransformOp.TYPE_BILINEAR);
img = op.filter(img, null);

但是,在这个缓冲图像中,我在位置 (x,y) 处有一个像素,我试图跟踪旋转后。我想知道我应该如何跟随这个像素的位置?我不确定 AffineTransform 如何在数学上旋转图像,所以我希望有人可以提供一些见解来跟踪旋转后像素的位置。

【问题讨论】:

    标签: java


    【解决方案1】:

    我会使用以下

    AffineTransform tx = new AffineTransform();
    tx.rotate(3.14/5, img.getWidth() / 2, img.getHeight() / 2);
    
    AffineTransformOp op = new AffineTransformOp(tx,
    AffineTransformOp.TYPE_BILINEAR);
    BufferedImage img2 = op.filter(img, null);
    
    g2.drawImage(img, 0, 0, null);
    g2.drawImage(img2, 0, 0, null);
    g2.setColor(Color.magenta);
    Point2D.Double p2=(Point2D.Double)op.getPoint2D(new Point2D.Double(10, hc/2), null);
    g2.fillOval(10, hc/2, 5, 5);
    g2.setColor(Color.red);
    g2.fillOval((int)p2.x, (int)p2.y, 5, 5);
    System.out.println(p2.toString());
    

    虽然它的数学精度值得怀疑,但可以在“或多或少”的意义上使用。您可以通过自己的实验来确认,有问题的方法在哪里

      Point2D.Double p2=(Point2D.Double)op.getPoint2D(new Point2D.Double(x, y), null);
    

    【讨论】:

      【解决方案2】:

      首先,确定 AffineTransform 是顺时针还是逆时针移动图像(可能基于单位圆角逆时针)。如果顺时针移动,点(x,y)对应(-y,x),否则逆时针对应(y,-x)。

      【讨论】:

      • 感谢您的回复。但是,我不知道 AffineTransform 会移动图像回合。这些方程依赖于原点 (0,0),但我不知道这个函数认为原点是什么。
      • 好吧,只要将它应用到图像上,看看图像是什么样子的。我相信原点通常是左上角。另外,使用Math.PI/2
      【解决方案3】:

      AffineTransform 有一个transform() 方法,它采用Point2D。试试这个:

      Point pt = new Point(10, 10);  // replace 10, 10 with your pixel location
      Point transformedPt = tx.transform(pt, null);  // this is the new post-tx location
      

      【讨论】:

        猜你喜欢
        • 2013-12-15
        • 2011-02-15
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多