亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java OpenCV圖像處理之仿射變換,透視變換,旋轉(zhuǎn)詳解

 更新時(shí)間:2022年10月13日 14:08:35   作者:深色風(fēng)信子  
這篇文章主要為大家詳細(xì)介紹了Java OpenCV圖像處理中仿射變換,透視變換,旋轉(zhuǎn)的實(shí)現(xiàn),文中的示例代碼講解詳細(xì),快跟隨小編一起學(xué)習(xí)一下

1 仿射變換

仿射變換:一種二維坐標(biāo)到二維坐標(biāo)的線性變換,它保持二維圖像的平直性與平行性,即變換后直線依然是直線,平行的線依然平行。

package com.xu.opencv.image;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint2f;
import org.opencv.core.Point;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

/**
 * @author Administrator
 */
public class ImageChange {

    static {
        String os = System.getProperty("os.name");
        String type = System.getProperty("sun.arch.data.model");
        if (os.toUpperCase().contains("WINDOWS")) {
            File lib;
            if (type.endsWith("64")) {
                lib = new File("lib\\OpenCV-455\\x64\\" + System.mapLibraryName("opencv_java455"));
            } else {
                lib = new File("lib\\OpenCV-455\\x86\\" + System.mapLibraryName("opencv_java455"));
            }
            System.load(lib.getAbsolutePath());
        }
    }

    public static void main(String[] args) {
        warpAffine();
    }

    /**
     * OpenCV 仿射變換
     *
     * @return void
     * @Author: hyacinth
     * @Title: warpAffine
     * @Description: TODO
     * @date: 2022年2月22日12點(diǎn)32分
     */
    public static void warpAffine() {
        Mat src = Imgcodecs.imread("C:\\Users\\Administrator\\Desktop\\1.png");
        MatOfPoint2f point1 = new MatOfPoint2f(new Point(0, 0), new Point(0, src.rows()), new Point(src.cols(), 0));
        MatOfPoint2f point2 = new MatOfPoint2f(new Point(src.cols() * 0.1, src.cols() * 0.1), new Point(src.cols() * 0.2, src.cols() * 0.7),
                new Point(src.cols() * 0.7, src.cols() * 0.2));
        // 獲取 放射變換 矩陣
        Mat dst = Imgproc.getAffineTransform(point1, point2);
        // 進(jìn)行 仿射變換
        Mat image = new Mat();
        Imgproc.warpAffine(src, image, dst, src.size());
        HighGui.imshow("原圖", src);
        HighGui.imshow("仿射變換", image);
        HighGui.waitKey(0);
    }

}

2 透視變換

透視變換:透視變換是將一個(gè)平面投影到另一個(gè)平面的過程,也稱投影映射。是一種非線性變換,表現(xiàn)為可將梯形變換為平行四邊形,因此需要四個(gè)點(diǎn)來確定透視變換矩陣

package com.xu.opencv.image;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint2f;
import org.opencv.core.Point;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

/**
 * @author Administrator
 */
public class ImageChange {

    static {
        String os = System.getProperty("os.name");
        String type = System.getProperty("sun.arch.data.model");
        if (os.toUpperCase().contains("WINDOWS")) {
            File lib;
            if (type.endsWith("64")) {
                lib = new File("lib\\OpenCV-455\\x64\\" + System.mapLibraryName("opencv_java455"));
            } else {
                lib = new File("lib\\OpenCV-455\\x86\\" + System.mapLibraryName("opencv_java455"));
            }
            System.load(lib.getAbsolutePath());
        }
    }

    public static void main(String[] args) {
        warpPerspective();
    }

    /**
     * OpenCV 透視變換
     *
     * @return void
     * @Author: hyacinth
     * @Title: warpPerspective
     * @Description: TODO
     * @date: 2022年2月22日12點(diǎn)32分
     */
    public static void warpPerspective() {
        Mat src = Imgcodecs.imread("C:\\Users\\Administrator\\Desktop\\1.png");
        MatOfPoint2f point1 = new MatOfPoint2f();
        List<Point> before = new ArrayList<>();
        before.add(new Point(0, 0));
        before.add(new Point(src.cols(), 0));
        before.add(new Point(0, src.rows()));
        before.add(new Point(src.cols(), src.rows()));
        point1.fromList(before);
        MatOfPoint2f point2 = new MatOfPoint2f();
        List<Point> after = new ArrayList<>();
        after.add(new Point(src.cols(), src.rows()));
        after.add(new Point(src.cols() * 0.1, src.rows() * 0.8));
        after.add(new Point(src.cols() * 0.7, src.rows() * 0.3));
        after.add(new Point(0, 0));
        point2.fromList(after);
        // 獲取 透視變換 矩陣
        Mat dst = Imgproc.getPerspectiveTransform(point1, point2);
        // 進(jìn)行 透視變換
        Mat image = new Mat();
        Imgproc.warpPerspective(src, image, dst, src.size());
        HighGui.imshow("原圖", src);
        HighGui.imshow("透視變換", image);
        HighGui.waitKey(0);
    }

}

3 圖像旋轉(zhuǎn)

package com.xu.opencv.image;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint2f;
import org.opencv.core.Point;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

/**
 * @author Administrator
 */
public class ImageChange {

    static {
        String os = System.getProperty("os.name");
        String type = System.getProperty("sun.arch.data.model");
        if (os.toUpperCase().contains("WINDOWS")) {
            File lib;
            if (type.endsWith("64")) {
                lib = new File("lib\\OpenCV-455\\x64\\" + System.mapLibraryName("opencv_java455"));
            } else {
                lib = new File("lib\\OpenCV-455\\x86\\" + System.mapLibraryName("opencv_java455"));
            }
            System.load(lib.getAbsolutePath());
        }
    }

    public static void main(String[] args) {
        rotate();
    }

    /**
     * OpenCV 透視變換
     *
     * @return void
     * @Author: hyacinth
     * @Title: rotate
     * @Description: TODO
     * @date: 2022年2月22日12點(diǎn)32分
     */
    public static void rotate() {
        Mat src = Imgcodecs.imread("C:\\Users\\Administrator\\Desktop\\1.png");
        // 圖像中心
        Point center = new Point(src.cols() / 2, src.rows() / 2);
        // 獲取 旋轉(zhuǎn) 矩陣
        Mat dst = Imgproc.getRotationMatrix2D(center, 45, 0.5);
        // 進(jìn)行 圖像旋轉(zhuǎn)
        Mat image = new Mat();
        Imgproc.warpAffine(src, image, dst, src.size());
        HighGui.imshow("原圖", src);
        HighGui.imshow("圖像旋轉(zhuǎn)", image);
        HighGui.waitKey(0);
    }

}

到此這篇關(guān)于Java OpenCV圖像處理之仿射變換,透視變換,旋轉(zhuǎn),平移,縮放詳解的文章就介紹到這了,更多相關(guān)Java OpenCV圖像處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論