java + opencv 实现图片透视变换

package hsytest;

import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.utils.Converters;

import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class HsyOpencvUtils {

    static {
        // 解决awt报错问题
        System.setProperty("java.awt.headless", "false");
        System.out.println("java.library.path = " + System.getProperty("java.library.path"));
        // 加载动态库
        // URL url = ClassLoader.getSystemResource("opencv_java341.dll");
        // URL url = HsyOpencvTest.class.getResource("opencv_java320.dll");
        // String path = url.toString();
        // System.out.println( "path = " + path );
        System.load( "E:\\git\\study\\opencvHandleImg-master\\out\\production\\Opencv\\opencv_java320.dll" );
    }

    /**
     * 图片的透视变换
     */
    public static void perspectiveTransform( String imagePath_src,
                                             String outputPath,
                                             Point p1_src,
                                             Point p2_src,
                                             Point p3_src,
                                             Point p4_src,
                                             Point p1_output,
                                             Point p2_output,
                                             Point p3_output,
                                             Point p4_output  ) {
        try{
            Mat mat_src = Imgcodecs.imread( imagePath_src );
            Mat mat_output = new Mat();

            List<Point> points_src = Arrays.asList( p1_src,p2_src,p3_src,p4_src );
            Mat mat_points_src= Converters.vector_Point_to_Mat( points_src,CvType.CV_32F );

            List<Point> points_output = Arrays.asList( p1_output,p2_output,p3_output,p4_output );
            Mat mat_points_output = Converters.vector_Point_to_Mat( points_output,CvType.CV_32F );

            Mat mat_transform_map = Imgproc.getPerspectiveTransform( mat_points_src, mat_points_output );
            Imgproc.warpPerspective( mat_src, mat_output, mat_transform_map, mat_src.size(),Imgproc.INTER_LINEAR );
            Imgcodecs.imwrite( outputPath,mat_output );
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/heshiyuan1406146854/article/details/130149603