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

Python使用OpenCV庫實(shí)現(xiàn)圖像幾何變化

 更新時(shí)間:2024年12月10日 10:52:23   作者:手搓人生  
幾何變換是通過數(shù)學(xué)變換將圖像的像素從一個(gè)位置映射到另一個(gè)位置的過程,在圖像處理領(lǐng)域,幾何變換是一個(gè)非常重要的操作,它可以改變圖像的位置、大小、方向或形狀,本文將介紹如何利用 Python 的 OpenCV 庫實(shí)現(xiàn)圖像的幾何變換,需要的朋友可以參考下

引言

在圖像處理領(lǐng)域,幾何變換是一個(gè)非常重要的操作,它可以改變圖像的位置、大小、方向或形狀。在計(jì)算機(jī)視覺中,這些操作對(duì)于圖像預(yù)處理、特征提取和圖像增強(qiáng)至關(guān)重要。本文將介紹如何利用 Python 的 OpenCV 庫實(shí)現(xiàn)圖像的幾何變換,包括平移、旋轉(zhuǎn)、縮放、仿射變換和透視變換。

1. 什么是幾何變換?

幾何變換是通過數(shù)學(xué)變換將圖像的像素從一個(gè)位置映射到另一個(gè)位置的過程。根據(jù)變換的性質(zhì),可以將其分為以下幾類:

  • 平移:移動(dòng)圖像位置。
  • 縮放:調(diào)整圖像尺寸。
  • 旋轉(zhuǎn):改變圖像方向。
  • 仿射變換:對(duì)圖像進(jìn)行線性變換,包括平移、旋轉(zhuǎn)、縮放和傾斜。
  • 透視變換:改變圖像的視角,使其產(chǎn)生三維效果。

2. OpenCV 幾何變換基本操作

2.1 平移

平移是將圖像沿 x 和 y 軸移動(dòng),公式如下:

在 OpenCV 中實(shí)現(xiàn):

import cv2
import numpy as np

# 讀取圖像
img = cv2.imread('image.jpg')

# 定義平移矩陣 [1, 0, tx] 和 [0, 1, ty]
tx, ty = 100, 50
M = np.float32([[1, 0, tx], [0, 1, ty]])

# 執(zhí)行平移變換
shifted = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))

cv2.imshow('Shifted Image', shifted)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.2 縮放

縮放是按比例放大或縮小圖像尺寸。在 OpenCV 中,使用 cv2.resize()

# 縮放圖像到指定大小
resized = cv2.resize(img, (300, 200))

# 按比例縮放
scaled = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_LINEAR)

2.3 旋轉(zhuǎn)

旋轉(zhuǎn)變換公式:

在 OpenCV 中實(shí)現(xiàn):

(h, w) = img.shape[:2]
center = (w // 2, h // 2)

# 生成旋轉(zhuǎn)矩陣
angle = 45
scale = 1.0
M = cv2.getRotationMatrix2D(center, angle, scale)

# 執(zhí)行旋轉(zhuǎn)
rotated = cv2.warpAffine(img, M, (w, h))

2.4 仿射變換

仿射變換通過三個(gè)點(diǎn)的映射定義圖像變換。在 OpenCV 中使用 cv2.getAffineTransform()

# 定義原圖像和目標(biāo)圖像的三個(gè)點(diǎn)
pts1 = np.float32([[50, 50], [200, 50], [50, 200]])
pts2 = np.float32([[10, 100], [200, 50], [100, 250]])

# 獲取仿射變換矩陣
M = cv2.getAffineTransform(pts1, pts2)

# 執(zhí)行仿射變換
affined = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))

2.5 透視變換

透視變換通過四個(gè)點(diǎn)定義,可以改變圖像的視角:

# 定義原圖像和目標(biāo)圖像的四個(gè)點(diǎn)
pts1 = np.float32([[56, 65], [368, 52], [28, 387], [389, 390]])
pts2 = np.float32([[0, 0], [300, 0], [0, 300], [300, 300]])

# 獲取透視變換矩陣
M = cv2.getPerspectiveTransform(pts1, pts2)

# 執(zhí)行透視變換
warped = cv2.warpPerspective(img, M, (300, 300))

3. 實(shí)用技巧與注意事項(xiàng)

  1. 邊界處理:幾何變換可能會(huì)導(dǎo)致部分像素超出邊界,建議在設(shè)計(jì)時(shí)考慮圖像的大小。
  2. 插值方法
    • cv2.INTER_NEAREST:最近鄰插值,速度快但效果較差。
    • cv2.INTER_LINEAR:雙線性插值,適用于縮放。
    • cv2.INTER_CUBIC:三次插值,適合高質(zhì)量變換。
  3. 變換順序:如果需要同時(shí)進(jìn)行多個(gè)幾何變換(如旋轉(zhuǎn)后平移),可以通過矩陣乘法將多個(gè)變換合并。

4. 應(yīng)用場(chǎng)景

  • 圖像校正:修正拍攝中的傾斜、畸變。
  • 特征對(duì)齊:人臉識(shí)別中常用仿射變換將人臉對(duì)齊。
  • 數(shù)據(jù)增強(qiáng):通過隨機(jī)幾何變換擴(kuò)展數(shù)據(jù)集,用于訓(xùn)練深度學(xué)習(xí)模型。
  • 視覺特效:制作圖像的動(dòng)態(tài)效果或藝術(shù)處理。

5. 總結(jié)

幾何變換是圖像處理中不可或缺的工具,OpenCV 提供了高效的方法來實(shí)現(xiàn)各種變換操作。在理解每種變換的數(shù)學(xué)原理后,可以根據(jù)應(yīng)用場(chǎng)景靈活組合這些技術(shù),從而完成更復(fù)雜的圖像處理任務(wù)。希望這篇文章能夠幫助你更好地掌握 Python + OpenCV 中的幾何變換操作!

以上就是Python使用OpenCV庫實(shí)現(xiàn)圖像幾何變化的詳細(xì)內(nèi)容,更多關(guān)于Python OpenCV圖像幾何變化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解如何使用Python和正則表達(dá)式處理XML表單數(shù)據(jù)

    詳解如何使用Python和正則表達(dá)式處理XML表單數(shù)據(jù)

    在日常的Web開發(fā)中,處理表單數(shù)據(jù)是一個(gè)常見的任務(wù),而XML是一種常用的數(shù)據(jù)格式,用于在不同的系統(tǒng)之間傳遞和存儲(chǔ)數(shù)據(jù),本文通過闡述一個(gè)技術(shù)問題并給出解答的方式,介紹如何使用Python和正則表達(dá)式處理XML表單數(shù)據(jù),需要的朋友可以參考下
    2023-09-09
  • python版DDOS攻擊腳本

    python版DDOS攻擊腳本

    這篇文章主要為大家詳細(xì)介紹了python版DDOS攻擊腳本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • 純Python實(shí)現(xiàn)遺傳算法詳解

    純Python實(shí)現(xiàn)遺傳算法詳解

    遺傳算法(GA)是七十年代被霍蘭德提出來的,那還是8086的時(shí)代,但在如今的3nm時(shí)代,仍然散發(fā)著經(jīng)典的光輝,下面我們就來看看如何利用Python實(shí)現(xiàn)遺傳算法吧
    2023-08-08
  • numpy.ndarray 實(shí)現(xiàn)對(duì)特定行或列取值

    numpy.ndarray 實(shí)現(xiàn)對(duì)特定行或列取值

    今天小編就為大家分享一篇numpy.ndarray 實(shí)現(xiàn)對(duì)特定行或列取值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • VS2022+Python3.11實(shí)現(xiàn)C++調(diào)用python接口

    VS2022+Python3.11實(shí)現(xiàn)C++調(diào)用python接口

    在C/C++中嵌入Python,可以使用Python提供的強(qiáng)大功能,通過嵌入Python可以替代動(dòng)態(tài)鏈接庫形式的接口,本文主要介紹了VS2022+Python3.11實(shí)現(xiàn)C++調(diào)用python接口,感興趣的可以了解一下
    2023-12-12
  • PyQt5創(chuàng)建一個(gè)新窗口的實(shí)例

    PyQt5創(chuàng)建一個(gè)新窗口的實(shí)例

    今天小編就為大家分享一篇PyQt5創(chuàng)建一個(gè)新窗口的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • pycharm設(shè)置python文件模板信息過程圖解

    pycharm設(shè)置python文件模板信息過程圖解

    這篇文章主要介紹了pycharm設(shè)置python文件模板信息過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 關(guān)于Python參數(shù)解析器argparse的應(yīng)用場(chǎng)景

    關(guān)于Python參數(shù)解析器argparse的應(yīng)用場(chǎng)景

    這篇文章主要介紹了關(guān)于Python參數(shù)解析器argparse的應(yīng)用場(chǎng)景,argparse 模塊使編寫用戶友好的命令行界面變得容易,程序定義了所需的參數(shù),而 argparse 將找出如何從 sys.argv 中解析這些參數(shù),需要的朋友可以參考下
    2023-08-08
  • Python+PIL實(shí)現(xiàn)支付寶AR紅包

    Python+PIL實(shí)現(xiàn)支付寶AR紅包

    這篇文章主要為大家詳細(xì)介紹了Python+PIL實(shí)現(xiàn)支付寶AR紅包,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Django使用 Bootstrap 樣式修改書籍列表過程解析

    Django使用 Bootstrap 樣式修改書籍列表過程解析

    這篇文章主要介紹了Django使用 Bootstrap 樣式修改書籍列表過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08

最新評(píng)論