我尝试使用AffineTransform和Scalr.resize调整缓冲图像的大小
这是我的两个代码.
使用Scalr.resize:
BufferedImage buff = robot.createScreenCapture(new Rectangle(bufx,bufy,bufwidth,bufheight)); // x-coord, y-coord, width, height
BufferedImage scrCapt = Scalr.resize(buff, Method.BALANCED, scrwidth, scrheight);
Run Code Online (Sandbox Code Playgroud)
使用AffineTransform:
BufferedImage buff = robot.createScreenCapture(new Rectangle(bufx,bufy,bufwidth,bufheight)); // x-coord, y-coord, width, height
BufferedImage scrCapt = new BufferedImage(bufwidth,bufheight,BufferedImage.TYPE_INT_ARGB);
AffineTransform atscr = new AffineTransform();
atscr.scale(aspectRatioWidth,aspectRatioHeight);
AffineTransformOp scaleOp = new AffineTransformOp(atscr, AffineTransformOp.TYPE_BILINEAR);
scrCapt = scaleOp.filter(buff, scrCapt);
Run Code Online (Sandbox Code Playgroud)
变量已在类内部的开头声明:
static int bufx = 0;
static int bufy = 0;
static int bufwidth = 1;
static int bufheight = 1;
static int scrwidth = 0;
static int …
Run Code Online (Sandbox Code Playgroud) 我有两个 2x3 矩阵 A 和 B - 每个矩阵都用于仿射变换。我需要将 A 和 B 组合成第三个矩阵 C,它将把 A 和 B 的仿射变换组合成一个矩阵。
我需要如何将它们相乘?
A B 还是 B A ?
区别在于 A 或 B 被调换了还是根本没有任何区别?
我读到另一个解决方案是使用 3x3 矩阵并复制到前两行中,并且只使用结果中的前两行。但它归结为同样的问题,如果它是 A B 或 B A。
此外,是否有一种简单的方法可以在 OpenCV 中实现这一点,或者我是否需要实现上述每个步骤?
我一直在使用Affine Transform在我的java项目中旋转一个String,而我还不是一个经验丰富的程序员,所以我花了很长时间做一个看似很小的任务.旋转一个字符串.
现在我终于得到了或多或少的工作,正如我所希望的那样,除非它没有像我想要的那样精确地完成......
由于经过了大量的反复试验并阅读了仿射变换的描述,我仍然不太清楚它到底是做什么的.我想我现在所知道的是,我取一个字符串,并定义字符串的中心(或我想要旋转的点),但是矩阵在哪里?(显然我不知道嘿嘿)
任何人都可以试着向我解释仿射变换是如何工作的,换句话说就是java doc?也许它可以帮助我调整我的实现,而且,我真的很想知道:)
提前致谢.
我有两个2D三角形(即,它们都位于平面中),并且想要找到将它们中的一个最接近地映射到另一个上的相似性变换(旋转+缩放+平移).
这两个三角形实际上并不相似,所以我只想让变换尽可能地对齐它们.
我知道我可以在两个三角形之间创建一个仿射变换,它将精确地映射到另一个三角形,但我不想要仿射变换中存在的剪切效果.我希望我的变换只由翻译,旋转和缩放组成.
知道怎么做吗?
对于一个简单的矢量绘图应用程序,我希望实现一个“选择框”,它是节点布局边界的图形表示。
例子:
感谢Jewelsea和他的BoundsExample,我现在对如何获取盒子的数据有了很好的了解。我正在努力解决的部分实际上是在场景上绘制盒子,以正确尊重节点上的转换的方式。
在这种情况下,正确意味着边界逻辑大小随节点缩放,但选择框的笔划保持不变。这意味着选择框随其相应的节点缩放,但笔画保持未缩放。
我可以想到实现这样一个选择框的两种通用策略。
作为我的自定义节点的属性 选择框可以是我的自定义节点的内部详细信息,其可见性绑定到节点的选定状态。在这种情况下,如果可能的话,我需要找到一种方法让节点忽略父级转换。
在透明窗格上的缩放节点顶部绘制选择框在这种情况下,在将节点的转换应用到其边界之后,我会将选择框绑定到缩放节点的布局边界。这在 JFX 中似乎不会发生(即使对于“boundsInParent”),因为您可以通过对第 122 行中的“group”应用一些缩放来快速测试示例。
带缩放的修改示例:
package application;
import javafx.application.Application;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.ReadOnlyObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.geometry.Bounds;
import javafx.scene.Cursor;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Control;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.effect.DropShadow;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.Shape; …
Run Code Online (Sandbox Code Playgroud) 我不是问AffineTransform如何工作,而是问如何使用它的translate方法。
我读了很多次API,但仍然不明白它是如何工作的。
公共无效翻译(双tx,双ty)
将此转换与翻译转换连接起来。这相当于调用 concatenate(T),其中 T 是由以下矩阵表示的 AffineTransform:
Run Code Online (Sandbox Code Playgroud)[ 1 0 tx ] [ 0 1 ty ] [ 0 0 1 ]
问题:
affineTransform.translate(100, 0) 以某种方式将图像向右移动 +100 像素,向底部移动 +100 像素。为什么会这样呢?
如果我需要经常移动图像,我是否可以使用translate()来移动图像?如果没有,在框架中移动旋转图像的推荐方法是什么?
我有一个图像被裁剪并调整为图像输入大小。据我理解,这与仿射变换相同。
我试图简化下面的代码,以便它通过使用以下函数执行相同的操作:(类似于下面的示例)。
scipy.ndimage.affine_transform()
Run Code Online (Sandbox Code Playgroud)
问题是我并不真正理解该函数的参数,因此我无法使用 affine_transform() 函数实现优雅的单行。提供并解释代码的解决方案可能会帮助我更好地理解这个 affine_transform() 函数。
import numpy as npy
import PIL.Image
import scipy.misc as smc
import scipy.ndimage as snd
#crop factor
s = 1.045
#input image
img2crop = npy.float32(PIL.Image.open("input_image.jpg)")
h, w = img2crop.shape[:2] #get the dimensions of the input image
#Box-crop values: calculate new crop Dimensions based on 's'
wcrop = float(w) / (s)
hcrop = float(wcrop) / (float(w) / float(h))
hcrop = int(round(hcrop))
wcrop = int(round(wcrop))
#crop applied from top-left to right and bottom
b_left = …
Run Code Online (Sandbox Code Playgroud) 我有一个图像,我试图使用skimage.PiecewiseAffineTransform
和来扭曲skimage.warp
。我有一组控制点 ( true
) 映射到一组新的控制点 ( ideal
),但扭曲没有返回我期望的结果。
在这个例子中,我有一个简单的波长梯度,我试图将其“拉直”成列。(您可能会问为什么我要查找轮廓和插值,但那是因为我实际上将此代码应用于更复杂的用例。我只是想重现这个简单示例的所有代码,这会导致相同的奇怪输出。)
为什么我的输出图像只是将输入图像扭曲成正方形和插图?我正在使用 Python 2.7.12 和 matplotlib 1.5.1。这是代码。
import matplotlib.pyplot as plt
import numpy as np
from skimage import measure, transform
true = np.array([range(i,i+10) for i in range(20)])
ideal = np.array([range(10)]*20)
# Find contours of ideal and true images and create list of control points for warp
true_control_pts = []
ideal_control_pts = []
for lam in ideal[0]:
try:
# Get the isowavelength contour in the true and ideal images …
Run Code Online (Sandbox Code Playgroud) 我想在某些单独的(x,y)点上使用与在cv2.warpAffine图像上使用的相同的仿射矩阵M。看来cv2.transform是要走的路。当我尝试发送Nx2的点矩阵时,我感到很沮丧(
src = np.array([
[x1,y1],[x2,y2],[x3,y3],[x4,y4]], dtype = "float32")
print('source shape '+str(src.shape))
dst=cv2.transform(src,M)
cv2.error: /home/jeremy/sw/opencv-3.1.0/modules/core/src/matmul.cpp:1947: error: (-215) scn == m.cols || scn + 1 == m.cols in function transform
Run Code Online (Sandbox Code Playgroud)
我可以使用numpy算术获得所需的转换:
dst = np.dot(src,M[:,0:2]) +M[:,2]
print('dest:{}'.format(dst))
Run Code Online (Sandbox Code Playgroud)
但是想了解发生了什么。文档说cv2.transform想要的通道数等于M中的列数,但我不清楚通道是什么-也许是'x'通道和'y'通道,但是第三个通道是,不同的行表示什么?
我可以在训练期间通过应用随机变换(旋转/平移/重新缩放)来增强数据,但我不知道选择的值。
我需要知道应用了哪些值。我可以手动设置这些值,但这样我就失去了火炬视觉变换提供的很多好处。
有没有一种简单的方法可以让这些价值观以合理的方式实现并在培训期间应用?
这是一个例子。我希望能够打印出每个图像上应用的旋转角度、平移/重新缩放:
import numpy as np
import matplotlib.pyplot as plt
from torchvision import transforms
RandAffine = transforms.RandomAffine(degrees=0, translate=(0.1, 0.1), scale=(0.8, 1.2))
rotate = transforms.RandomRotation(degrees=45)
shift = RandAffine
composed = transforms.Compose([rotate,
shift])
# Apply each of the above transforms on sample.
fig = plt.figure()
sample = np.zeros((28,28))
sample[5:15,7:20] = 255
sample = transforms.ToPILImage()(sample.astype(np.uint8))
title = ['None', 'Rot','Aff','Comp']
for i, tsfrm in enumerate([None,rotate, shift, composed]):
if tsfrm:
t_sample = tsfrm(sample)
else:
t_sample = sample
ax = plt.subplot(1, 5, i + …
Run Code Online (Sandbox Code Playgroud) python affinetransform pytorch torchvision data-augmentation
affinetransform ×10
python ×4
java ×3
matrix ×2
numpy ×2
opencv ×2
awt ×1
c++ ×1
drawstring ×1
geometry ×1
image ×1
imgscalr ×1
javafx-8 ×1
math ×1
python-2.7 ×1
pytorch ×1
rotation ×1
scaling ×1
scikit-image ×1
selection ×1
swing ×1
torchvision ×1