java - 如何在java中将2个矩阵相乘,然后将结果用作Imgproc.warpPerspective函数的转换矩阵

标签 java opencv

我想创建3个矩阵: A 为 3x4,B 为 4x4,C 为 4x3。然后我想将它们相乘 D = A * (B * C) 以获得 3x3 矩阵 然后用D调用warpPerspective。 以上这些都需要用Java来完成。在 C++ 中,与 Java 相比,它“极其”容易,我找不到任何 Java 实现的实际示例。

最佳答案

package test;

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgproc.Imgproc;

public class MatrixMul {

    static {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    }

    public static void main(String[] args) {
        Mat A = new Mat(3, 4, CvType.CV_32FC1);
        Mat B = new Mat(4, 4, CvType.CV_32FC1);
        Mat C = new Mat(4, 3, CvType.CV_32FC1);
        Mat tmp = new Mat();
        Mat D = new Mat();

        A.put(0, 0, new float[] { 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3 });
        B.put(0, 0, new float[] { 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4 });
        C.put(0, 0, new float[] { 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3 });

        Core.gemm(B, C, 1, new Mat(), 0, tmp);
        Core.gemm(A, tmp, 1, new Mat(), 0, D);

//      Mat src = ...
//      Mat dst = new Mat();
//      Imgproc.warpPerspective(src, dst, D, new Size(3,3));

        System.out.println("A =\n" + A.dump());
        System.out.println("B =\n" + B.dump());
        System.out.println("C =\n" + C.dump());
        System.out.println("B * C =\n" + tmp.dump());
        System.out.println("D = A * (B * C) =\n" + D.dump());
    }

}

关于java - 如何在java中将2个矩阵相乘,然后将结果用作Imgproc.warpPerspective函数的转换矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27681389/

相关文章:

java - java中为什么需要复制构造函数以及什么时候应该使用复制构造函数

c - 如何为不同范围的值创建查找表

java - spring security - 拒绝访问处理程序

java - 接收和输出 JSON 错误消息 Android

c++ - 交叉编译时包含外部库

c# - Emgu CV - 内存泄漏(内存消耗)

opencv - 编译cv.h时出错 : No such file or directory

c++ - OpenCV:如何对带有图像的文件夹进行批处理?

java - 在 IntelliJ IDEA 中突出显示异常抛出器

java - JFileChooser 使用扩展名保存