标签: affinetransform

如何实现椭圆形GradientPaint?

我们知道有一个RadialGradientPaint用Java 命名的类,我们可以使用它来绘制圆形渐变画.

但我想要一个椭圆形(椭圆形)GradientPaint.如何实现椭圆形GradientPaint

java awt radial-gradients affinetransform graphics2d

4
推荐指数
1
解决办法
4098
查看次数

如何估计OpenCV中的2D相似变换(线性共形,非反射相似性)?

我试图通过匹配SIFT描述符并通过RANSAC查找转换矩阵来搜索输入图像中的特定对象.该对象只能通过2D空间中的相似变换(缩放,旋转,平移)在场景中进行修改,因此我需要在3D空间中估计2x2变换矩阵而不是3x3单应矩阵.我怎样才能在OpenCV中实现这一目标?

opencv image-processing computer-vision homography affinetransform

4
推荐指数
1
解决办法
1万
查看次数

AffineTransform的问题

你好我是affineTransformjava 新手.我想用它来剪切一些我以后要使用的GUI.现在我只想测试一个示例代码,但我无法解释它的输出.这是代码

    package main;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.geom.AffineTransform;

    import javax.swing.BorderFactory;
    import javax.swing.JFrame;
    import javax.swing.JPanel;

    public class MainClass{
    public static void main(String[] args) {
    JFrame jf = new JFrame("Demo");

    jf.getContentPane().add(new MyCanvas());

    jf.setSize(600, 600);
    jf.setVisible(true);
  }
}

    class Left extends JPanel {

    Left(){
        setPreferredSize(new Dimension(450,450));
        setBorder(BorderFactory.createLineBorder(Color.green));
        setBackground(Color.gray);

    }


      public void paintComponent(Graphics g) {

            super.paintComponent(g);

            Graphics2D g2 = (Graphics2D) g;

            AffineTransform at = new AffineTransform();

            g2.setTransform(at);

            g2.drawRect(getWidth()/2 - 10, getHeight()/2 - 10, 20, …
Run Code Online (Sandbox Code Playgroud)

java swing java-2d affinetransform

3
推荐指数
1
解决办法
3233
查看次数

使用Affine Trasform缩放时,JPanel不绘制

我的应用程序布局类似于:自定义JFrame(仅处理gui的创建),其中包含一个标准JPanel,其中包含一个自定义JPanel

在自定义的JPanel(称为MinimapPanel)内部,我更改了paint方法:

    //in a constructor:
    scaledTransform = new AffineTransform(); = new AffineTransform();
    scaledTransform = new AffineTransform();
    scaledTransform.scale(scaleAmount, scaleAmount);
    //...
@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);

    Graphics2D g2d = (Graphics2D) g;
    g2d.setTransform(scaledTransform);
    mapDrawer.paintMinimap(g, seatMap, miniViewHandler);//it just calls a bunch of fillRect

    if (viewRect != null) {
        g.setColor(new Color(255, 0, 0));
        int x = viewRect.x;
        int y = viewRect.y;
        g.drawRect(x, y, Math.abs(viewRect.width), Math.abs(viewRect.height));
    }
    g2d.setTransform(plainTransform);
}
Run Code Online (Sandbox Code Playgroud)

如果我不应用trasform,或者缩放比例为1.0(无),则一切正常,但如果缩放,则每次JFrame重新绘制时,MinimapPanel都保持空白。

关于我可能做错了什么的任何想法?

java scaling swing paint affinetransform

3
推荐指数
1
解决办法
603
查看次数

移动物体和计时器

我有一个500宽度和400高度的屏幕,我有一个带有一堆形状的矢量.假设矢量有两种不同的形状,例如.我希望从屏幕底部随机弹出的对象达到一定的上升然后再下降(类似于游戏水果忍者,其中水果是我的形状).

在我的主(视图)中,我有一个形状向量,我实例化定时器,添加到数组并使用translate函数将它们放在屏幕的底部.我的计时器接受一个动作监听器,它基本上改变了形状的转换,直到上升然后向下移动,但我的问题是所有的形状都是在同一时间开始的.

像这样的东西:

        Shape f = new Shape(new Area(new Ellipse2D.Double(0, 50, 50, 50)));   
        f.translate(0, 400);   
        f.timer = new Timer( 10 , taskPerformer);    
        f.timer.start();    
        vector.add(f);    


        Shape f2 = new Shape(new Area(new Rectangle2D.Double(0, 50, 50, 50)));    
        f2.translate(200, 400);    
        f2.timer = new Timer( 10 , taskPerformer);    
        f2.timer.setInitialDelay(5000);    
        f2.timer.start();    
        vector.add(f2);
Run Code Online (Sandbox Code Playgroud)

和我的动作听众:

        Random generator = new Random();            
        ActionListener taskPerformer = new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                   //...Perform a task...
             for (Shape s : model.getShapes()) {
                // Scale object using translate
                // once reached …
Run Code Online (Sandbox Code Playgroud)

java animation swing timer affinetransform

3
推荐指数
1
解决办法
1万
查看次数

旋转后如何在图像上找到一个点?

旋转后,图像上的点(x,y)需要位于同一图像上.我使用了imrotate,imtransform和imwarp来旋转图像(下面的代码显示了imwarp的实现),但似乎没有一个对我有用.输出旋转图像大于原始图像.任何人都可以建议如何在输出旋转图像上找到相同的点.

close all;
I=imread('P.png');
x=339;
y=317;

subplot(2,2,1);
imshow(I),title('Original Image');    
hold on;
plot(x,y,'ro');
hold off;
theta=5;
tform = affine2d([cosd(theta) -sind(theta) 0;sind(theta) cosd(theta) 0; 0 0 1])
RI = imwarp(I,tform);
[x1,y1]=transformPointsForward(tform,x,y);
subplot(2,2,2);
imshow(RI),title('Rotated Image');    
hold on;
plot(x1,y1,'ro');
hold off;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 虽然旋转图像与原始图像具有相同的大小,但代码仍然有效.但在我的情况下,它会导致裁剪原始图像.我已经能够在各种论坛上找到这个问题的答案,但似乎没有一个对我有用.请回答.

matlab image-processing rotation affinetransform

3
推荐指数
1
解决办法
751
查看次数

scipy.ndimage.interpolate.affine_transform 失败

这段代码:

from scipy.ndimage.interpolation import affine_transform
import numpy as np
...
nzoom = 1.2
newimage = affine_transform(self.image, matrix=np.array([[nzoom, 0],[0, nzoom]]))
Run Code Online (Sandbox Code Playgroud)

失败:

RuntimeError: affine matrix has wrong number of rows
Run Code Online (Sandbox Code Playgroud)

矩阵有什么问题?我也试过matrix=[nzoom, nzoom],根据我对文档的阅读应该做同样的事情,但它以同样的方式失败。

python scipy affinetransform

3
推荐指数
1
解决办法
1925
查看次数

OpenCV 用 Python 拉直图像

有什么方法可以使用 OpenCV 和 Python 来拉直这个图像吗?我正在使用不同的转换来解决它,但我无法得到它。

图片

这是我的代码:

rows, cols, h = img.shape

M = np.float32([[1, 0, 100], [0, 1, 50]])
Run Code Online (Sandbox Code Playgroud)

然后我应用仿射变换。

dst = cv2.warpAffine(roi, M, (cols, rows))
Run Code Online (Sandbox Code Playgroud)

我仍然无法获得所需的图像输出来拉直。现在挠我的头快一个小时了。任何人都可以帮助我吗?

opencv image-processing image-rotation affinetransform python-2.7

3
推荐指数
1
解决办法
8683
查看次数

在MATLAB中围绕其中心旋转图像矩阵

假设我有一个2x2矩阵,其中填充了代表平面的值.现在我想在"z方向"中以三维方式围绕自身旋转平面.为了更好地理解,请参见下图:

在此输入图像描述

我想知道这是否可以通过一个简单的仿射矩阵,因此我创建了以下简单的脚本:

%Create a random value matrix
A = rand*ones(200,200);

%Make a box in the image
A(50:200-50,50:200-50) = 1;
Run Code Online (Sandbox Code Playgroud)

现在我可以通过这样的旋转矩阵在二维房间中应用变换:

R = affine2d([1 0 0; .5 1 0; 0 0 1])
tform = affine3d(R);
transformed = imwarp(A,tform);
Run Code Online (Sandbox Code Playgroud)

但是,这不会产生上面所需的输出,我不太确定如何创建2-D仿射矩阵来创建这样的行为.

我猜三维仿射矩阵可以做到这一点.但是,如果我定义一个3-D仿射矩阵,我就不能再使用矩阵的二维表示,因为MATLAB会抛出错误:

The number of dimensions of the input image A must be 3 when the
specified geometric transformation is 3-D.
Run Code Online (Sandbox Code Playgroud)

那么如何用仿射矩阵编码所需的输出呢?

matlab image matrix affinetransform

3
推荐指数
1
解决办法
555
查看次数

如何从单个组件创建 2D 透视变换矩阵?

我正在尝试从单个组件(如平移、旋转、缩放、剪切)创建一个 2D 透视变换矩阵。但最终矩阵并没有产生如下图所示的真实透视效果。我想我在为创建矩阵而编写的代码中缺少一些组件。有人可以帮我在下面的函数中添加缺少的组件及其公式吗?我的代码使用了 opencv 库

在此处输入图片说明

cv::Mat getPerspMatrix2D( double rz, double s, double tx, double ty ,double shx, double shy)
{

cv::Mat R = (cv::Mat_<double>(3,3) <<
        cos(rz), -sin(rz), 0,
        sin(rz), cos(rz), 0,
        0, 0, 1);

cv::Mat S = (cv::Mat_<double>(3,3) <<
        s, 0, 0,
        0, s, 0,
        0, 0, 1);


cv::Mat Sh = (cv::Mat_<double>(3,3) <<
        1, shx, 0,
        shy, 1, 0,
        0, 0, 1);


cv::Mat T = (cv::Mat_<double>(3,3) <<
        1, 0, tx,
        0, 1, ty,
        0, 0, 1);

return T * Sh …
Run Code Online (Sandbox Code Playgroud)

opencv transformation affinetransform perspective

3
推荐指数
1
解决办法
3397
查看次数