最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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è)平面的過(guò)程,也稱(chēng)投影映射。是一種非線性變換,表現(xiàn)為可將梯形變換為平行四邊形,因此需要四個(gè)點(diǎn)來(lái)確定透視變換矩陣

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)文章

  • 完美解決java double數(shù)相加和相減的方案

    完美解決java double數(shù)相加和相減的方案

    這篇文章主要介紹了完美解決java double數(shù)相加和相減的方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • SpringBoot如何指定某些類(lèi)優(yōu)先啟動(dòng)

    SpringBoot如何指定某些類(lèi)優(yōu)先啟動(dòng)

    這篇文章主要介紹了SpringBoot如何指定某些類(lèi)優(yōu)先啟動(dòng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 解讀SpringBoot接收List<Bean>參數(shù)問(wèn)題(POST請(qǐng)求方式)

    解讀SpringBoot接收List<Bean>參數(shù)問(wèn)題(POST請(qǐng)求方式)

    這篇文章主要介紹了解讀SpringBoot接收List<Bean>參數(shù)問(wèn)題(POST請(qǐng)求方式),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Java?Spring?boot實(shí)現(xiàn)生成二維碼

    Java?Spring?boot實(shí)現(xiàn)生成二維碼

    大家好,本篇文章主要講的是Java?Spring?boot實(shí)現(xiàn)生成二維碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • Quartz+Spring Boot實(shí)現(xiàn)動(dòng)態(tài)管理定時(shí)任務(wù)

    Quartz+Spring Boot實(shí)現(xiàn)動(dòng)態(tài)管理定時(shí)任務(wù)

    最近做項(xiàng)目遇到動(dòng)態(tài)管理定時(shí)任務(wù)的需求,剛拿到這個(gè)需求還真不知道從哪下手,經(jīng)過(guò)一番思考,終于找出實(shí)現(xiàn)思路,接下來(lái)通過(guò)本文給大家介紹了Quartz+Spring Boot實(shí)現(xiàn)動(dòng)態(tài)管理定時(shí)任務(wù)的相關(guān)知識(shí),需要的朋友可以參考下
    2018-09-09
  • JAVA中的延遲隊(duì)列DelayQueue應(yīng)用解析

    JAVA中的延遲隊(duì)列DelayQueue應(yīng)用解析

    這篇文章主要介紹了JAVA中的延遲隊(duì)列DelayQueue應(yīng)用解析,DelayQueue是一個(gè)根據(jù)元素的到期時(shí)間來(lái)排序的隊(duì)列,而并非是一般的隊(duì)列那樣先進(jìn)先出,最快過(guò)期的元素排在隊(duì)首,越晚到期的元素排得越后,需要的朋友可以參考下
    2023-12-12
  • IDEA中打jar包的2種方式(Maven打jar包)

    IDEA中打jar包的2種方式(Maven打jar包)

    這篇文章主要給大家介紹了關(guān)于IDEA中打jar包的2種方式,分別是不使用Maven直接打Jar包與使用Maven打jar包的兩種方法,需要的朋友可以參考下
    2021-05-05
  • Spring?Cloud中Sentinel的兩種限流模式介紹

    Spring?Cloud中Sentinel的兩種限流模式介紹

    如何使用Sentinel做流量控制呢?這篇文章就來(lái)為大家詳細(xì)介紹了Spring?Cloud中Sentinel的兩種限流模式,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-05-05
  • 關(guān)于Hystrix的監(jiān)控及可視化面板

    關(guān)于Hystrix的監(jiān)控及可視化面板

    這篇文章主要介紹了關(guān)于Hystrix的監(jiān)控及可視化面板,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 基于java 線程的幾種狀態(tài)(詳解)

    基于java 線程的幾種狀態(tài)(詳解)

    下面小編就為大家?guī)?lái)一篇基于java 線程的幾種狀態(tài)(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就想給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09

最新評(píng)論

玛沁县| 乌什县| 迁安市| 鄂托克旗| 南丹县| 台南市| 婺源县| 怀安县| 牙克石市| 大丰市| 北辰区| 河间市| 呼伦贝尔市| 岳普湖县| 广汉市| 精河县| 武胜县| 独山县| 阳朔县| 正阳县| 安国市| 习水县| 丹江口市| 三亚市| 兖州市| 颍上县| 五寨县| 谢通门县| 乐昌市| 秦皇岛市| 宜宾县| 苍南县| 沙雅县| 焦作市| 延庆县| 平果县| 陵水| 河南省| 永泰县| 阜康市| 二连浩特市|