国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Open CV 圖像處理基礎(chǔ):(六)在Java中使用 Open CV進(jìn)行圖片翻轉(zhuǎn)和圖片旋轉(zhuǎn)

這篇具有很好參考價(jià)值的文章主要介紹了Open CV 圖像處理基礎(chǔ):(六)在Java中使用 Open CV進(jìn)行圖片翻轉(zhuǎn)和圖片旋轉(zhuǎn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

在Java中使用 Open CV進(jìn)行圖片翻轉(zhuǎn)和圖片旋轉(zhuǎn)

前言

在Java中使用OpenCV進(jìn)行圖片翻轉(zhuǎn)和旋轉(zhuǎn)是一種基本的圖像處理技術(shù),廣泛應(yīng)用于計(jì)算機(jī)視覺、圖像編輯和人工智能領(lǐng)域。OpenCV(Open Source Computer Vision Library)是一個(gè)開源的計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫,它提供了許多常見的圖像處理和分析功能,旨在為實(shí)時(shí)的圖像處理提供高效能的解決方案。

圖片翻轉(zhuǎn)

函數(shù)

Core.flip 函數(shù)可以對(duì)圖像進(jìn)行沿x軸、y軸或兩者都翻轉(zhuǎn)的操作

Core.flip(Mat src, Mat dst, int flipCode)

參數(shù)說明:

  • Mat src: 原始圖像(輸入圖像)。
  • Mat dst: 翻轉(zhuǎn)后的圖像將存儲(chǔ)在這里(輸出圖像)。它需要提前初始化。
  • int flipCode: 控制翻轉(zhuǎn)方向的值。
    • flipCode = 0:沿x軸翻轉(zhuǎn)(垂直翻轉(zhuǎn))。
    • flipCode > 0:沿y軸翻轉(zhuǎn)(水平翻轉(zhuǎn))。
    • flipCode < 0:沿兩軸翻轉(zhuǎn)(即先水平后垂直翻轉(zhuǎn),或者先垂直后水平翻轉(zhuǎn))

代碼

此段代碼先讀取圖像,然后創(chuàng)建一個(gè)空?qǐng)D像,然后對(duì)圖像進(jìn)行垂直翻轉(zhuǎn),將結(jié)果保存新創(chuàng)建的空?qǐng)D像,最后保存翻轉(zhuǎn)后的這個(gè)圖像到文件中

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Point;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class ImageFlip {
    static {
        // 加載 OpenCV 的本地庫
        System.load("D:/dll/x64/opencv_java440.dll");
    }

    public static void main(String[] args) {
        String old = "D:/to/A.jpg";
        String outPut = "D:/to/A_0.jpg";
        // 讀取圖像
        Mat src = Imgcodecs.imread(old); // 替換為你的圖像路徑
        // 如果圖像未找到或無法讀取,則src.empty()會(huì)返回true
        if (src.empty()) {
            System.out.println("Error: Image cannot be loaded!");
            return;
        }
        // 創(chuàng)建一個(gè)空的圖像用于存放翻轉(zhuǎn)后的結(jié)果
        Mat dst = new Mat();
        // 對(duì)圖像進(jìn)行垂直翻轉(zhuǎn)
        Core.flip(src, dst, 0);
        // 保存翻轉(zhuǎn)后的圖像
        Imgcodecs.imwrite(outPut, dst); // 替換為你的輸出圖像路徑
    }
}

示例

Open CV 圖像處理基礎(chǔ):(六)在Java中使用 Open CV進(jìn)行圖片翻轉(zhuǎn)和圖片旋轉(zhuǎn),Open CV,圖像處理,java,人工智能,opencv

  • 可以看到圖片沿水平方向進(jìn)行了翻轉(zhuǎn)

其它翻轉(zhuǎn)方向

垂直翻轉(zhuǎn)

沿x軸翻轉(zhuǎn),即圖像進(jìn)行水平翻轉(zhuǎn),將flipCode設(shè)置為0

        // 對(duì)圖像進(jìn)行水平翻轉(zhuǎn),將flipCode設(shè)置為0
        Core.flip(src, dst, 0);

Open CV 圖像處理基礎(chǔ):(六)在Java中使用 Open CV進(jìn)行圖片翻轉(zhuǎn)和圖片旋轉(zhuǎn),Open CV,圖像處理,java,人工智能,opencv

兩軸翻轉(zhuǎn)

即先水平后垂直翻轉(zhuǎn),或者先垂直后水平翻轉(zhuǎn)

對(duì)圖像進(jìn)行水平翻轉(zhuǎn),將flipCode設(shè)置為-1

        Core.flip(src, dst, -1);

Open CV 圖像處理基礎(chǔ):(六)在Java中使用 Open CV進(jìn)行圖片翻轉(zhuǎn)和圖片旋轉(zhuǎn),Open CV,圖像處理,java,人工智能,opencv

圖片旋轉(zhuǎn)

函數(shù)

Imgproc.getRotationMatrix2D 是OpenCV庫中用于創(chuàng)建二維旋轉(zhuǎn)矩陣的函數(shù)。在圖像處理中,旋轉(zhuǎn)是一種基本的仿射變換,它可以使圖像圍繞某一個(gè)點(diǎn)進(jìn)行旋轉(zhuǎn)。
Imgproc.getRotationMatrix2D 函數(shù)可以幫助你生成一個(gè)旋轉(zhuǎn)矩陣,然后你可以使用Imgproc.warpAffine函數(shù)應(yīng)用這個(gè)矩陣到圖像上,以實(shí)現(xiàn)旋轉(zhuǎn)的效果。

該函數(shù)的原型是:

Mat getRotationMatrix2D(Point center, double angle, double scale)

參數(shù)說明:

  • center: 旋轉(zhuǎn)的中心點(diǎn),通常是圖像的中心,你可以指定任何點(diǎn)作為旋轉(zhuǎn)的中心。
  • angle: 旋轉(zhuǎn)角度,以度為單位。正值表示逆時(shí)針旋轉(zhuǎn),負(fù)值表示順時(shí)針旋轉(zhuǎn)。
  • scale: 圖像縮放的比例因子。如果不希望在旋轉(zhuǎn)時(shí)改變圖像的尺寸,這個(gè)值應(yīng)該設(shè)置為1.0。如果你想在旋轉(zhuǎn)的同時(shí)縮小或放大圖像,可以設(shè)置不同的值。

返回值:

函數(shù)返回一個(gè)2x3的浮點(diǎn)數(shù)矩陣(即OpenCV中的Mat對(duì)象)。這個(gè)矩陣就是所謂的仿射變換矩陣,你可以直接將它作為Imgproc.warpAffine函數(shù)的參數(shù)來應(yīng)用旋轉(zhuǎn)。
getRotationMatrix2D函數(shù)計(jì)算得到的矩陣可以實(shí)現(xiàn)旋轉(zhuǎn)加上縮放的復(fù)合變換。
這個(gè)矩陣的形式通常如下所示:

[ α β (1-α)center.x - βcenter.y ]
[ -β α β*center.x + (1-α)*center.y ]

其中:

  • α = scale * cos(θ)
  • β = scale * sin(θ)
  • θ 是旋轉(zhuǎn)角度,此處使用的是逆時(shí)針定義。

這個(gè)變換矩陣考慮了旋轉(zhuǎn)和縮放兩個(gè)因素,還考慮了旋轉(zhuǎn)不會(huì)改變中心點(diǎn)坐標(biāo)的事實(shí)。而warpAffine函數(shù)會(huì)使用這個(gè)矩陣來計(jì)算圖像中每個(gè)新位置上的像素值。

簡(jiǎn)而言之,通過Imgproc.getRotationMatrix2D函數(shù),你可以創(chuàng)建一個(gè)仿射變換矩陣,它定義了一個(gè)圍繞某一點(diǎn)的旋轉(zhuǎn)和縮放操作。這個(gè)矩陣之后可以被用于Imgproc.warpAffine函數(shù),以實(shí)現(xiàn)圖像的旋轉(zhuǎn)和縮放。

代碼

在Java中使用OpenCV進(jìn)行圖片旋轉(zhuǎn)的步驟:

  • 加載OpenCV庫:在你的Java代碼中,使用System.loadLibrary(Core.NATIVE_LIBRARY_NAME);來加載OpenCV庫。
  • 讀取圖片:使用Imgcodecs.imread方法來讀取圖片。
  • 創(chuàng)建旋轉(zhuǎn)矩陣:使用Imgproc.getRotationMatrix2D來創(chuàng)建旋轉(zhuǎn)矩陣。這需要中心點(diǎn)坐標(biāo)、旋轉(zhuǎn)角度和縮放因子。
  • 應(yīng)用旋轉(zhuǎn):應(yīng)用旋轉(zhuǎn)矩陣到讀取的圖片上,使用Imgproc.warpAffine方法。
  • 保存圖片:使用Imgcodecs.imwrite來保存修改后的圖片。

以下是一個(gè)旋轉(zhuǎn)圖片的具體代碼示例:


import org.opencv.core.Mat;
import org.opencv.core.Point;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class ImageRotate {
    static {
        // 加載 OpenCV 的本地庫
        System.load("D:/dll/x64/opencv_java440.dll");
    }

    public static void main(String[] args) {
        String old = "D:/to/A.jpg";
        String outPut = "D:/to/A_Rotate.jpg";
        // 讀取圖像
        Mat src = Imgcodecs.imread(old); // 替換為你的圖像路徑
        // 如果圖像未找到或無法讀取,則src.empty()會(huì)返回true
        if (src.empty()) {
            System.out.println("Error: Image cannot be loaded!");
            return;
        }
        // 圖片的中心點(diǎn)
        Point center = new Point(src.cols() / 2, src.rows() / 2);
        // 旋轉(zhuǎn)矩陣
        Mat rotationMatrix = Imgproc.getRotationMatrix2D(center, 180, 1); // 90度旋轉(zhuǎn)
        // 旋轉(zhuǎn)后的圖片大小
        Size rotatedSize = new Size(src.cols(), src.rows());
        // 應(yīng)用旋轉(zhuǎn)
        Mat dst = new Mat();
        Imgproc.warpAffine(src, dst, rotationMatrix, rotatedSize, Imgproc.INTER_LINEAR);
        // 保存旋轉(zhuǎn)后的圖片
        Imgcodecs.imwrite(outPut, dst);
    }
}

示例

可以看到旋轉(zhuǎn)180度的圖片和兩軸翻轉(zhuǎn)的圖片方向一樣

Open CV 圖像處理基礎(chǔ):(六)在Java中使用 Open CV進(jìn)行圖片翻轉(zhuǎn)和圖片旋轉(zhuǎn),Open CV,圖像處理,java,人工智能,opencv文章來源地址http://www.zghlxwxcb.cn/news/detail-789959.html

Open CV 專欄導(dǎo)航

  • (一)Open CV 在windows環(huán)境初始化和 Java 動(dòng)態(tài)庫加載方式介紹
  • (二)Open CV 從基本概念到實(shí)踐操作
  • (三)使用 Open CV 在 Java 中進(jìn)行基本的圖片縮放操作
  • (四)使用 Open CV 在 Java 中進(jìn)行基本的圖片模糊處理
  • (五)Java 使用 Open CV 的繪圖函數(shù)
  • (六)在Java中使用 Open CV進(jìn)行圖片翻轉(zhuǎn)和圖片旋轉(zhuǎn)
  • (七)學(xué)習(xí) OpenCV 的圖像增強(qiáng)和邊緣檢測(cè)功能

到了這里,關(guān)于Open CV 圖像處理基礎(chǔ):(六)在Java中使用 Open CV進(jìn)行圖片翻轉(zhuǎn)和圖片旋轉(zhuǎn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【C++】【圖像處理】形態(tài)學(xué)處理(腐蝕、膨脹)算法解析(以.raw格式的圖像為基礎(chǔ)進(jìn)行圖像處理、gray levels:256)

    ? ? 總結(jié) 針對(duì)處理二值圖圖像時(shí),腐蝕或膨脹算法的核心: 1、確定該點(diǎn)(假設(shè)為A點(diǎn))的灰度級(jí),是0還是255; 2、遍歷以該點(diǎn)為中心的3x3的鄰域,獲取灰度級(jí)等于0或者等于255的像素點(diǎn)個(gè)數(shù),使用 flag 變量記錄; 3、當(dāng) flag 大于設(shè)定的數(shù)值時(shí),則A點(diǎn)的灰度級(jí)將被賦值為0或者

    2024年02月05日
    瀏覽(19)
  • Python 使用多種方法對(duì)圖像進(jìn)行銳化處理——圖像處理

    Python 使用多種方法對(duì)圖像進(jìn)行銳化處理——圖像處理

    fun_01() fun_02() fun_03() ? ? ?

    2024年02月13日
    瀏覽(94)
  • 【圖像處理】使用 Python 進(jìn)行圖像增強(qiáng)

    ????????圖像增強(qiáng)技術(shù)的深度和復(fù)雜性往往在一系列捕獲和共享中被忽視。從傅里葉變換到白平衡和直方圖處理,各種方法都可以將普通照片轉(zhuǎn)換為引人注目的圖像。這篇博文旨在解開這些技術(shù)。 ????????我在節(jié)日期間拍了一張照片,在夜間慶?;顒?dòng)中。遺憾的是,圖

    2024年02月16日
    瀏覽(162)
  • 【C++】【圖像處理】均值濾波和高斯濾波(低通濾波)算法解析(以.raw格式的圖像為基礎(chǔ)進(jìn)行圖像處理、gray levels:256)

    ?中值濾波: 中值濾波中的MidValueFind函數(shù)的實(shí)現(xiàn)就是冒泡排序,最后去中間值返回: ?Soble算子邊緣提?。?? ? 總結(jié): 1、均值、高斯濾波和Sobel算子邊緣提取的核心,創(chuàng)建卷積核并確定各個(gè)點(diǎn)上的權(quán)重,然后將邊緣灰度級(jí)歸零(是否邊緣歸零按業(yè)務(wù)需求決定),提取非邊緣像

    2024年02月05日
    瀏覽(29)
  • 使用openCV進(jìn)行圖像處理

    使用 openCV進(jìn)行圖像處理,又名:學(xué)習(xí)計(jì)算機(jī)視覺理論,做 demo(第3 天) 目錄 2.1 圖像模糊 2.1.1 均值濾波 2.1.2 中值濾波 2.1.3 高斯濾波 2.1.4 案例實(shí)現(xiàn) 2.2 圖像銳化 2.2.1 圖像銳化簡(jiǎn)介 2.2.2 案例實(shí)現(xiàn) 3.1 OpenCV繪圖 3.1.1 使用OpenCV繪制各種圖形 3.1.2 案例實(shí)現(xiàn) 3.2 圖像的幾何變換 3.2.1 幾

    2024年01月22日
    瀏覽(52)
  • “探索圖像處理的奧秘:使用Python和OpenCV進(jìn)行圖像和視頻處理“

    “探索圖像處理的奧秘:使用Python和OpenCV進(jìn)行圖像和視頻處理“

    ?1、上傳圖片移除背景后下載。在線摳圖軟件_圖片去除背景 | remove.bg – remove.bg 2、對(duì)下載的圖片放大2倍。ClipDrop - Image upscaler ?3、對(duì)放大后的下載照片進(jìn)行編輯。 ?4、使用deepfacelive進(jìn)行換臉。 1)將第三步的照片復(fù)制到指定文件夾。C:myAppdeepfakelivetempDeepFaceLive_NVIDIAuserda

    2024年02月16日
    瀏覽(102)
  • 入門:使用 OpenCV 進(jìn)行圖像處理

    入門:使用 OpenCV 進(jìn)行圖像處理

    介紹 圖像處理是計(jì)算機(jī)視覺的一個(gè)分支,它使用各種算法來處理和分析數(shù)字圖像。它涉及使用數(shù)學(xué)或統(tǒng)計(jì)操作來為許多應(yīng)用修改圖像,包括但不限于醫(yī)學(xué)和衛(wèi)星圖像以及數(shù)字?jǐn)z影。本文探討了圖像處理的基礎(chǔ)知識(shí)和該領(lǐng)域中使用的一些技術(shù)。 目錄 圖像處理基礎(chǔ) 圖像處理的應(yīng)

    2024年02月08日
    瀏覽(32)
  • 如何使用Matlab進(jìn)行圖像處理

    如何使用Matlab進(jìn)行圖像處理

    圖像處理是操縱圖像的數(shù)字屬性以提高其質(zhì)量或從圖像中獲得所需信息的過程。它需要在圖像處理應(yīng)用程序中導(dǎo)入圖像,分析圖像,然后對(duì)圖像進(jìn)行操作,以獲得能夠產(chǎn)生預(yù)期結(jié)果的適當(dāng)輸出。 在這篇文章中,我們將討論使用Matlab進(jìn)行圖像處理和分析的基礎(chǔ)知識(shí),以確定圖像

    2023年04月10日
    瀏覽(87)
  • 使用 C# / Unity 進(jìn)行圖像處理

    使用 C# / Unity 進(jìn)行圖像處理

    起因:有個(gè)需求要批量按比例調(diào)整UI頁面大小。并不是簡(jiǎn)單的縮放,是所有素材都需要按比例縮小。于是,圖片首當(dāng)其沖。這里記錄一下解決方案,因?yàn)閰⒖剂送Χ鄤e人的事例,雖然都描述的都差不多,但大部分都只描述了方法,這里記錄一下整個(gè)完整的方案。 環(huán)境:Unity2

    2023年04月08日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包