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

《數(shù)字圖像處理-OpenCV/Python》連載(41)圖像的旋轉(zhuǎn)

這篇具有很好參考價值的文章主要介紹了《數(shù)字圖像處理-OpenCV/Python》連載(41)圖像的旋轉(zhuǎn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

《數(shù)字圖像處理-OpenCV/Python》連載(41)圖像的旋轉(zhuǎn)


本書京東優(yōu)惠購書鏈接:https://item.jd.com/14098452.html
本書CSDN獨(dú)家連載專欄:https://blog.csdn.net/youcans/category_12418787.html

《數(shù)字圖像處理-OpenCV/Python》連載(41)圖像的旋轉(zhuǎn),《數(shù)字圖像處理-OpenCV》連載,opencv,python,圖像處理,計算機(jī)視覺


第 6 章 圖像的幾何變換


幾何變換分為等距變換、相似變換、仿射變換和投影變換,是指對圖像的位置、大小、形狀和投影進(jìn)行變換,將圖像從原始平面投影到新的視平面。OpenCV圖像的幾何變換,本質(zhì)上是將一個多維數(shù)組通過映射關(guān)系轉(zhuǎn)換為另一個多維數(shù)組。


本章內(nèi)容概要

  • 介紹仿射變換,學(xué)習(xí)使用仿射變換矩陣實(shí)現(xiàn)圖像的仿射變換。
  • 學(xué)習(xí)使用函數(shù)實(shí)現(xiàn)圖像的平移、縮放、旋轉(zhuǎn)、翻轉(zhuǎn)和斜切。
  • 介紹投影變換,學(xué)習(xí)使用投影變換矩陣實(shí)現(xiàn)圖像的投影變換。
  • 介紹圖像的重映射,學(xué)習(xí)使用映射函數(shù)實(shí)現(xiàn)圖像的自定義變換和動態(tài)變換。

6.1 圖像的旋轉(zhuǎn)

旋轉(zhuǎn)變換屬于等距變換,變換后圖像的長度和面積不變。
圖像以左上角(0,0)為旋轉(zhuǎn)中心、以旋轉(zhuǎn)角度 θ 順時針旋轉(zhuǎn),可以構(gòu)造旋轉(zhuǎn)變換矩陣 MAR,通過函數(shù) cv.warpAffine 計算旋轉(zhuǎn)變換圖像。

[ x ~ y ~ 1 ] = M A R [ x y 1 ] , M A R = [ c o s θ ? s i n θ 0 s i n θ c o s θ 0 0 0 1 ] \begin{bmatrix} \tilde{x}\\ \tilde{y}\\ 1 \end{bmatrix} = M_{AR} \begin{bmatrix} x\\ y\\ 1 \end{bmatrix} ,\hspace{1em} M_{AR} = \begin{bmatrix} cos \theta &-sin \theta &0\\ sin \theta &cos \theta &0\\ 0 &0 &1 \end{bmatrix} ?x~y~?1? ?=MAR? ?xy1? ?,MAR?= ?cosθsinθ0??sinθcosθ0?001? ?

圖像以任意點(diǎn)(x,y)為旋轉(zhuǎn)中心、以旋轉(zhuǎn)角度 順時針旋轉(zhuǎn),可以先將原點(diǎn)平移到旋轉(zhuǎn)中心(x,y),再對原點(diǎn)進(jìn)行旋轉(zhuǎn)處理,最后反向平移回坐標(biāo)原點(diǎn)。

OpenCV中的函數(shù)cv.getRotationMatrix2D可以計算以任意點(diǎn)為中心的旋轉(zhuǎn)變換矩陣。

函數(shù)原型

cv.getRotationMatrix2D(center, angle, scale) → M

函數(shù)cv.getRotationMatrix2D能根據(jù)旋轉(zhuǎn)中心和旋轉(zhuǎn)角度計算旋轉(zhuǎn)變換矩陣M:

M = [ α β ( 1 ? α ) x ? β y ? β α β x + ( 1 ? α ) y ] M = \begin{bmatrix} \alpha & \beta &(1-\alpha)x-\beta y\\ -\beta &\alpha &\beta x +(1-\alpha) y \end{bmatrix} M=[α?β?βα?(1?α)x?βyβx+(1?α)y?]

參數(shù)說明

  • center:旋轉(zhuǎn)中心坐標(biāo),格式為元組(x,y)。
  • angle:旋轉(zhuǎn)角度,角度制,以逆時針方向旋轉(zhuǎn)。
  • scale:縮放系數(shù),是浮點(diǎn)型數(shù)據(jù)。
  • M:旋轉(zhuǎn)變換矩陣,是形狀為(2,3)、類型為np.float32的Numpy數(shù)組。

注意問題

  • (1)函數(shù)可以直接獲取以任意點(diǎn)為中心的旋轉(zhuǎn)變換矩陣,不需要額外進(jìn)行平移變換。

  • (2) 如果旋轉(zhuǎn)圖像的尺寸與原始圖像的尺寸相同,則四角的像素會被切除(見圖6-3(2))。為了保留原始圖像的內(nèi)容,需要在旋轉(zhuǎn)的同時對圖像進(jìn)行縮放,或?qū)⑿D(zhuǎn)圖像的尺寸調(diào)整為:

W r o t = w c o s θ + h s i n θ H r o t = h c o s θ + w s i n θ W_{rot} = w cos \theta+ h sin \theta \\ H_{rot} = h cos \theta+ w sin \theta Wrot?=wcosθ+hsinθHrot?=hcosθ+wsinθ
式中,w、h分別為原始圖像的寬度與高度; 、 分別為旋轉(zhuǎn)圖像的寬度與高度。

  • (3) 縮放系數(shù)scale在旋轉(zhuǎn)的同時能進(jìn)行縮放,但水平、垂直方向必須使用相同的縮放比例。

函數(shù)cv.rotate用于直角旋轉(zhuǎn),旋轉(zhuǎn)角度為90度、180度或270度。該方法通過矩陣轉(zhuǎn)置實(shí)現(xiàn),運(yùn)行速度極快。

函數(shù)原型

cv.rotate(src, rotateCode[, dst]) → dst

參數(shù)說明

  • src:輸入圖像,是Numpy數(shù)組。
  • dst:輸出圖像,類型與src相同,圖像尺寸由旋轉(zhuǎn)角度確定。
  • rotateCode:旋轉(zhuǎn)標(biāo)志符。
    • ROTATE_90_CLOCKWISE:順時針旋轉(zhuǎn)90度。
    • ROTATE_180:順時針旋轉(zhuǎn)180度。
    • ROTATE_90_COUNTERCLOCKWISE:順時針旋轉(zhuǎn)270度。

注意問題

旋轉(zhuǎn)角度為180度時,輸出圖像的尺寸與輸入圖像的尺寸相同;旋轉(zhuǎn)角度為90度或180度時,輸出圖像的高度和寬度分別等于輸入圖像的寬度和高度。


【例程0603】圖像的旋轉(zhuǎn)

本例程介紹以原點(diǎn)為旋轉(zhuǎn)中心、以任意點(diǎn)為旋轉(zhuǎn)中心旋轉(zhuǎn)圖像,以及圖像的直角旋轉(zhuǎn)。


# 【0603】圖像的旋轉(zhuǎn)
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

if __name__ == '__main__':
    img = cv.imread("../images/Fig0301.png")  # 讀取彩色圖像(BGR)
    height, width = img.shape[:2]  # 圖像的高度和寬度

    # (1) 以原點(diǎn)為旋轉(zhuǎn)中心
    x0, y0 = 0, 0  # 以左上角頂點(diǎn) (0,0) 作為旋轉(zhuǎn)中心
    theta, scale = 30, 1.0  # 逆時針旋轉(zhuǎn) 30 度,縮放系數(shù) 1.0
    MAR0 = cv.getRotationMatrix2D((x0,y0), theta, scale)  # 旋轉(zhuǎn)變換矩陣
    imgRot1 = cv.warpAffine(img, MAR0, (width, height))  

    # (2) 以任意點(diǎn)為旋轉(zhuǎn)中心
    x0, y0 = width//2, height//2  # 以圖像中心作為旋轉(zhuǎn)中心
    angle = theta * np.pi/180  # 弧度->角度
    wRot = int(width * np.cos(angle) + height * np.sin(angle))  # 調(diào)整寬度
    hRot = int(height * np.cos(angle) + width * np.sin(angle))  # 調(diào)整高度
    scale = width/wRot  # 根據(jù) wRot 調(diào)整縮放系數(shù)
    MAR1 = cv.getRotationMatrix2D((x0,y0), theta, 1.0)  # 逆時針旋轉(zhuǎn) 30 度,縮放系數(shù) 1.0
    MAR2 = cv.getRotationMatrix2D((x0,y0), theta, scale)  # 逆時針旋轉(zhuǎn) 30 度,縮放比例 scale
    imgRot2 = cv.warpAffine(img, MAR1, (height, width), borderValue=(255,255,255))  # 白色填充
    imgRot3 = cv.warpAffine(img, MAR2, (height, width))  # 調(diào)整縮放系數(shù),以保留原始圖像的內(nèi)容
    print(img.shape, imgRot2.shape, imgRot3.shape, scale)

    # (3) 圖像的直角旋轉(zhuǎn)
    imgRot90 = cv.rotate(img, cv.ROTATE_90_CLOCKWISE)  # 順時針旋轉(zhuǎn) 90度
    imgRot180 = cv.rotate(img, cv.ROTATE_180)  # 順時針旋轉(zhuǎn) 180度
    imgRot270 = cv.rotate(img, cv.ROTATE_90_COUNTERCLOCKWISE)  # 順時針旋轉(zhuǎn) 270度

    plt.figure(figsize=(9, 6))
    plt.subplot(231), plt.title("1.Rotate around the origin"), plt.axis('off')
    plt.imshow(cv.cvtColor(imgRot1, cv.COLOR_BGR2RGB))
    plt.subplot(232), plt.title("2.Rotate around the center"), plt.axis('off')
    plt.imshow(cv.cvtColor(imgRot2, cv.COLOR_BGR2RGB))
    plt.subplot(233), plt.title("3.Rotate and resize"), plt.axis('off')
    plt.imshow(cv.cvtColor(imgRot3, cv.COLOR_BGR2RGB))
    plt.subplot(234), plt.title("4.Rotate 90 degrees"), plt.axis('off')
    plt.imshow(cv.cvtColor(imgRot90, cv.COLOR_BGR2RGB))
    plt.subplot(235), plt.title("5.Rotate 180 degrees"), plt.axis('off')
    plt.imshow(cv.cvtColor(imgRot180, cv.COLOR_BGR2RGB))
    plt.subplot(236), plt.title("6.Rotate 270 degrees"), plt.axis('off')
    plt.imshow(cv.cvtColor(imgRot270, cv.COLOR_BGR2RGB))
    plt.tight_layout()
    plt.show()


程序說明:
運(yùn)行結(jié)果,圖像的旋轉(zhuǎn)如圖6-3所示。
(1) 圖6-3(1)~(3)用函數(shù)cv.getRotationMatrix2D計算旋轉(zhuǎn)變換矩陣后,通過函數(shù)cv.warpAffine計算旋轉(zhuǎn)變換圖像。圖6-3(1)以圖像原點(diǎn),即左上角為中心旋轉(zhuǎn),圖6-3(2)和圖6-3(3)圍繞圖像中心點(diǎn)旋轉(zhuǎn)變換。
(2) 圖像尺寸不變,中心旋轉(zhuǎn)后四角像素被切除(見圖6-3(2))。在計算旋轉(zhuǎn)變換矩陣時使用了縮放系數(shù),使旋轉(zhuǎn)圖像保留了原始圖像的內(nèi)容(見圖6-3(3))。
(3) 圖6-3(4)~(6)所示都是直角旋轉(zhuǎn),使用函數(shù)cv.rotate通過矩陣轉(zhuǎn)置實(shí)現(xiàn)。


《數(shù)字圖像處理-OpenCV/Python》連載(41)圖像的旋轉(zhuǎn),《數(shù)字圖像處理-OpenCV》連載,opencv,python,圖像處理,計算機(jī)視覺

*圖6-3 圖像的旋轉(zhuǎn)


版權(quán)聲明:
youcans@xupt 原創(chuàng)作品,轉(zhuǎn)載必須標(biāo)注原文鏈接:(https://blog.csdn.net/youcans/article/details/134317103)
Copyright 2023 youcans, XUPT
Crated:2023-11-11

歡迎關(guān)注本書CSDN獨(dú)家連載專欄
《數(shù)字圖像處理-OpenCV/Python》連載: https://blog.csdn.net/youcans/category_12418787.html文章來源地址http://www.zghlxwxcb.cn/news/detail-751393.html

到了這里,關(guān)于《數(shù)字圖像處理-OpenCV/Python》連載(41)圖像的旋轉(zhuǎn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 《數(shù)字圖像處理-OpenCV/Python》連載(4)圖像的讀取與保存

    《數(shù)字圖像處理-OpenCV/Python》連載(4)圖像的讀取與保存

    本書京東優(yōu)惠購書鏈接:https://item.jd.com/14098452.html 本書CSDN獨(dú)家連載專欄:https://blog.csdn.net/youcans/category_12418787.html 為了方便初學(xué)者從零開始學(xué)習(xí)OpenCV-Python,本書從圖像的讀取、保存和顯示等基本操作開始介紹,使讀者可以循序漸進(jìn)地使用和理解本書的每一個例程。 本章內(nèi)容

    2024年02月09日
    瀏覽(93)
  • 《數(shù)字圖像處理-OpenCV/Python》連載(10)圖像屬性與數(shù)據(jù)類型

    《數(shù)字圖像處理-OpenCV/Python》連載(10)圖像屬性與數(shù)據(jù)類型

    本書京東優(yōu)惠購書鏈接:https://item.jd.com/14098452.html 本書CSDN獨(dú)家連載專欄:https://blog.csdn.net/youcans/category_12418787.html 在Python語言中,OpenCV以Numpy數(shù)組存儲圖像,對圖像的訪問和處理都是通過Numpy數(shù)組的操作來實(shí)現(xiàn)的。 本章內(nèi)容概要 介紹Python語言中OpenCV的數(shù)據(jù)結(jié)構(gòu),學(xué)習(xí)獲取圖像

    2024年02月07日
    瀏覽(221)
  • 《數(shù)字圖像處理-OpenCV/Python》連載(22)繪制直線與線段

    《數(shù)字圖像處理-OpenCV/Python》連載(22)繪制直線與線段

    本書京東優(yōu)惠購書鏈接:https://item.jd.com/14098452.html 本書CSDN獨(dú)家連載專欄:https://blog.csdn.net/youcans/category_12418787.html 本章介紹OpenCV的繪圖功能和簡單的鼠標(biāo)交互處理方法。與Excel或Matplotlib中的可視化數(shù)據(jù)圖不同,OpenCV中的繪圖功能主要用于在圖像的指定位置繪制幾何圖形。 本

    2024年02月02日
    瀏覽(120)
  • 《數(shù)字圖像處理-OpenCV/Python》連載(26)繪制橢圓和橢圓弧

    《數(shù)字圖像處理-OpenCV/Python》連載(26)繪制橢圓和橢圓弧

    本書京東優(yōu)惠購書鏈接:https://item.jd.com/14098452.html 本書CSDN獨(dú)家連載專欄:https://blog.csdn.net/youcans/category_12418787.html 本章介紹OpenCV的繪圖功能和簡單的鼠標(biāo)交互處理方法。與Excel或Matplotlib中的可視化數(shù)據(jù)圖不同,OpenCV中的繪圖功能主要用于在圖像的指定位置繪制幾何圖形。 本

    2024年02月06日
    瀏覽(121)
  • 《數(shù)字圖像處理-OpenCV/Python》連載:空間濾波之高斯濾波器

    《數(shù)字圖像處理-OpenCV/Python》連載:空間濾波之高斯濾波器

    本書京東 優(yōu)惠購書鏈接 https://item.jd.com/14098452.html 本書CSDN 獨(dú)家連載專欄 https://blog.csdn.net/youcans/category_12418787.html 圖像濾波是指在盡可能保留圖像細(xì)節(jié)特征的條件下對目標(biāo)圖像的噪聲進(jìn)行抑制,是常用的圖像處理方法。 空間濾波也稱空間域濾波,濾波器規(guī)定了鄰域形狀與鄰域

    2024年02月02日
    瀏覽(98)
  • 【Python_Opencv圖像處理框架】信用卡數(shù)字識別項目

    【Python_Opencv圖像處理框架】信用卡數(shù)字識別項目

    本篇文章是opencv學(xué)習(xí)的第六篇文章,前面主要講解了對圖像的一些基本操作,這篇文章我們就開始大展身手,將前面所學(xué)的基礎(chǔ)操作活學(xué)活用。既能復(fù)習(xí)基礎(chǔ)操作,又能學(xué)到一些新的知識。作為初學(xué)者,我盡己所能,但仍會存在疏漏的地方,希望各位看官不吝指正?? 我們通

    2024年02月03日
    瀏覽(90)
  • MATLAB【數(shù)字圖像處理】 實(shí)驗一:圖像處理基本操作(平移、放大、縮小、旋轉(zhuǎn)、插值)

    MATLAB【數(shù)字圖像處理】 實(shí)驗一:圖像處理基本操作(平移、放大、縮小、旋轉(zhuǎn)、插值)

    1、熟悉并掌握MATLAB工具的使用;? 2、實(shí)現(xiàn)圖像的讀取、顯示、存儲、平移、鏡像、放大、縮小及旋轉(zhuǎn)操作; 3、掌握常用的插值方法,并了解其優(yōu)缺點(diǎn)。 Matlab 2020B 1、讀入一幅RGB圖像,變換為灰度圖像和二值圖像,并在同一個窗口內(nèi)分別顯示RGB圖像和灰度圖像,注上文字標(biāo)

    2024年02月06日
    瀏覽(21)
  • 數(shù)字圖像處理二維碼識別python+opencv實(shí)現(xiàn)二維碼實(shí)時識別

    數(shù)字圖像處理二維碼識別python+opencv實(shí)現(xiàn)二維碼實(shí)時識別

    數(shù)字圖像處理二維碼識別 python+opencv實(shí)現(xiàn)二維碼實(shí)時識別 特點(diǎn): (1)可以實(shí)現(xiàn)普通二維碼,條形碼; (2)解決了opencv輸出中文亂碼的問題 (3)增加網(wǎng)頁自動跳轉(zhuǎn)功能 (4)實(shí)現(xiàn)二維碼實(shí)時檢測和識別 代碼保證原創(chuàng)、無錯誤、能正常運(yùn)行(如果電腦環(huán)境配置沒問題) 送二維

    2024年01月16日
    瀏覽(102)
  • 數(shù)字圖像處理(實(shí)踐篇)二十七 Python-OpenCV 滑動條的使用

    數(shù)字圖像處理(實(shí)踐篇)二十七 Python-OpenCV 滑動條的使用

    目錄 1 涉及的函數(shù) 2 實(shí)踐 1 涉及的函數(shù) ⒈?setWindowProperty()用于設(shè)置GUI應(yīng)用程序的屬性 參數(shù) : ①?

    2024年01月25日
    瀏覽(97)
  • 數(shù)字圖像處理 matlab圖像的幾何運(yùn)算 實(shí)驗三 旋轉(zhuǎn) 縮放 裁剪 鏡像變換 平移

    數(shù)字圖像處理 matlab圖像的幾何運(yùn)算 實(shí)驗三 旋轉(zhuǎn) 縮放 裁剪 鏡像變換 平移

    原圖: 讀取原圖(這里我的圖片名字是atm.png): 我們先說原理,圖像旋轉(zhuǎn)的本質(zhì)是向量的旋轉(zhuǎn)。 矩陣乘法的實(shí)質(zhì)是進(jìn)行線性變換,因此對一個向量進(jìn)行旋轉(zhuǎn)操作也可以通過矩陣和向量相乘的方式進(jìn)行。 因為圖像都是通過二維矩陣存放的(單通道),所以對圖像進(jìn)行旋轉(zhuǎn)時

    2024年02月07日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包