OpenCV 使用 Numpy 数组作为 Python 中的输入。这抽象了底层 C++ 数组的许多特征。
接下来,OpenCV 中的所有函数(例如 cv2.getAffineTransform)对 C++ 中的输入数据执行检查,如下所示:
inputMat.checkVector(3, CV_32F) == 3
Run Code Online (Sandbox Code Playgroud)
由此产生的断言错误通常很神秘,有时在 Python 中无法正确捕获:
(-215:Assertion failed) src.checkVector(2, 5) == 3 && dst.checkVector(2, 5) == 3 in function 'cv::getAffineTransform'
Run Code Online (Sandbox Code Playgroud)
到底是什么导致了这些错误以及如何解释它们?
我需要注册为视频的每一帧提供的一些 3D 面部标志。对于此任务,我试图找出为连续帧给出的几个地标坐标之间的变换矩阵。例如,第 1 帧和第 2 帧中 3 个地标的 3D 坐标如下:
frame1 = [2 4 15; 4 15 14; 20 11 7]
frame2 = [16 5 12; 5 7 9; 11 6 19]
Run Code Online (Sandbox Code Playgroud)
我尝试过使用imregtformmatlab提供的函数和matlab的ABSOR工具。
tform = imregtform(frame1, frame2, 'affine','OnePlusOneEvolutionary','MeanSquares');
tform = absor(frame1, frame2)
Run Code Online (Sandbox Code Playgroud)
使用时出现如下错误imregtform:
Error using imregtform>parseInputs (line 261)
The value of 'MovingImage' is invalid. All dimensions of the moving image should be greater than 4.
Error in imregtform (line 124)
parsedInputs = parseInputs(varargin{:});
Run Code Online (Sandbox Code Playgroud)
注意:ABSOR 不查找仿射变换,它查找相似变换。
我想将OpenCV Mat中的一个三角形映射到另一个三角形,非常像warpAffine(在这里检查),但是对于三角形而不是四边形,以便在delaunay三角剖分中使用它.
我知道一个人可以使用面具,但我想知道是否有更好的解决方案.
最好的问候,丹尼尔
如何计算3D中4点之间的MatLab相似度变换?我可以从中计算变换矩阵
T*X = Xp,
但由于点坐标误差很小,它会给我仿射矩阵.我怎样才能将该矩阵与相似矩阵相匹配?我需要类似的东西fitgeotrans,但需要3D
谢谢
matlab transformation similarity affinetransform rotational-matrices
我正在尝试做一些类似的事情,但在 Android 上:http : //docs.opencv.org/doc/tutorials/imgproc/imgtrans/warp_affine/warp_affine.html 我有一个图像绘制到 ImageView,我希望能够选择 6 个点(3 个源和 3 个目标)并像之前的示例一样在 OpenCV 上使用 warpAffine 方法。我能够重现上面的示例,但是当从 onTouch 事件传递 X、Y 坐标时,它没有给我期望的结果。我认为问题是如何将 android 触摸坐标转换为 OpenCV Mat 列/行。也许我需要在 OpenCV 表面上显示图像?我希望我很清楚,提前致谢。
我正在用 Swing 制作一个 GUI,它使用 AffineTransform 来缩放在 JInternalFrame 上绘制的 Graphics2D 对象。问题是它在当前状态下有问题,我不知道为什么。
为什么我的代码不能正确缩放?为什么图形在调整大小时“跳”到面板顶部?
这是我的自包含示例:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;
import java.util.*;
public class MainPanel extends JFrame implements ActionListener{
private static final double version = 1.0;
private JDesktopPane desktop;
public static RFInternalFrame frame;
private java.util.List<Point> POINT_LIST = Arrays.asList(
//Top Row
new Point(50, 30),
new Point(70, 30),
new Point(90, 30),
new Point(110, 30),
new Point(130, 30),
new Point(150, 30),
new Point(170, 30),
new Point(190, 30),
new Point(210, 30),
new …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个类来在 x 和 y 方向上缝合雕刻图像。x 方向正在工作,为了减少 y 方向,我想简单地将图像旋转 90° 并在已经重新缩放的图像上运行相同的代码(仅在 x 方向上),然后将其旋转回其初始状态。
我找到了一些东西AffineTransform并尝试了它。它实际上产生了一个旋转的图像,但弄乱了颜色,我不知道为什么。
这是所有的代码:
import java.awt.image.BufferedImage;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.io.File;
import java.io.IOException;
import javafx.scene.paint.Color;
import javax.imageio.ImageIO;
public class example {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
// TODO code application logic here
BufferedImage imgIn = ImageIO.read(new File("landscape.jpg"));
BufferedImage imgIn2 = imgIn;
AffineTransform tx = new AffineTransform();
tx.rotate(Math.PI/2, imgIn2.getWidth() / 2, imgIn2.getHeight() / 2);//(radian,arbit_X,arbit_Y)
AffineTransformOp op …Run Code Online (Sandbox Code Playgroud) java bufferedimage seam-carving image-rotation affinetransform
我正在用 Java 创建一个多米诺骨牌游戏。我有以下代码加载,调整大小,然后在屏幕上显示多米诺骨牌图像:
ImageIcon imageIcon = new ImageIcon("images\\4-4.png");
Image image = imageIcon.getImage();
Image newimg = image.getScaledInstance(60, 120, java.awt.Image.SCALE_SMOOTH);
imageIcon = new ImageIcon(newimg);
JLabel img = new JLabel(imageIcon);
img.setBounds(100, 100, 60, 120);
getContentPane().add(img);
Run Code Online (Sandbox Code Playgroud)
我想要做的是将图像旋转 90 或 -90 度。我在互联网上搜索过,但我发现的例子似乎很复杂。
知道如何旋转我的图像吗?
顺便说一句,如果您认为这不是在多米诺骨牌游戏中显示多米诺骨牌的正确方式,请告诉我。我是java新手。
当我使用 warpAffine 剪切图像时:
M2 = np.float32([[1, 0, 0], [0.2, 1, 0]])
aff2 = cv2.warpAffine(im, M2, (W, H))
Run Code Online (Sandbox Code Playgroud)
我获得了一个没有围绕图像中心剪切的图像。我可以在图像的一侧看到黑色三角形区域,而另一侧没有黑色区域。
我怎么能让图像被对称剪切?
如何解决超定线性系统X * A = B,A, B是给定的,我需要找到X?
似乎方阵的解决方案很简单(/sf/answers/1319365211/):
X * A = B
M * A * Inv(A) = B * Inv(A)
M = B * Inv(A)
Run Code Online (Sandbox Code Playgroud)
但是如何处理非方阵呢?
示例代码:
def to_homogeneous(_pts):
n = _pts.shape[0]
_pts = _pts.transpose()
pts = np.ones((3,n), np.float32)
pts[:2,:] = _pts
return pts
def get_random_affine_matrix():
src_tri = np.random.rand(3,2) * np.random.randint(1,10)
src_tri = src_tri.astype(np.float32)
src_tri = to_homogeneous(src_tri)
dst_tri = np.random.rand(3,2) * np.random.randint(1,10)
dst_tri = dst_tri.astype(np.float32)
dst_tri = to_homogeneous(dst_tri)
m = dst_tri …Run Code Online (Sandbox Code Playgroud) affinetransform ×10
opencv ×4
java ×3
python ×3
matlab ×2
numpy ×2
swing ×2
android ×1
image ×1
java-2d ×1
math ×1
seam-carving ×1
similarity ×1
warp ×1