1. 程式人生 > >影象旋轉變換的推導

影象旋轉變換的推導

前面我們提到了影象的縮放變換,可以用矩陣乘法的形式來表達變換後的畫素位置對映關係。

那麼,對於旋轉變換呢?我們可以同樣將其想象成二維平面上向量的旋轉。如下圖所示,向量[x1,y1]逆時針旋轉θ度到了[x2,y2]。
這裡寫圖片描述
設定向量的長度為s,根據座標系定義,我們可以得到:

x2=scosβy2=ssinβ
根據上面的圖形,有:
β=α+θ
因此:
x2=scos(α+θ)y2=ssin(α+θ)
根據初中所學的三角函式公式:
sin(α+θ)=sinαcosθ+cosαsinθcos(α+θ)=cosαcosθsinαsinθ於是:
x2=scosαcosθssinαsinθy2=ssinαcosθ+scosαsinθ由於:
x1=scosαy1=ssinα因此:
x2=x1cosθy1sinθy2=x1sinθ+y1cosθ於是,上式寫成矩陣乘法的形式如下:
(77)[x2y2]=[cosθsinθsinθcosθ][x1y1]
我們來看看一個影象逆時針旋轉180度的情況。
import cv2

import numpy as np
import math

lenna = cv2.imread("lenna256.png", 0)
row, col = lenna.shape

lenna_rotation = np.zeros_like(lenna)

A = np.mat([[math.cos
(math.pi), -math.sin(math.pi)], [math.sin(math.pi), math.cos(math.pi)]]) for r in range(row): for l in range(col): v = np.dot(A.I, np.array([r, l]).T) lenna_rotation[r, l] = lenna[int(v[0, 0]), int(v[0, 1])] cv2.imshow("lenna", lenna) cv2.imshow("rotation", lenna_rotation) cv2.waitKey()

這裡寫圖片描述

上面的影象寬度和高度是一樣的,而且旋轉角度是180度,比較特殊。在一般情況下,我們需要注意的是2點:一是旋轉影象一般要將旋轉中心設定在影象的中心點位置;二是影象旋轉後,可能越過了原來的影象邊界範圍。這些都比較麻煩,好在opencv已經做好了這一切。

lenna = cv2.imread("lenna256.png", 0)
row, col = lenna.shape
M = cv2.getRotationMatrix2D((col // 2, row // 2), 70, 0.5)
dst = cv2.warpAffine(lenna, M, (col, row))
cv2.imshow("rotation", dst)
cv2
            
           

相關推薦

影象旋轉變換推導

前面我們提到了影象的縮放變換,可以用矩陣乘法的形式來表達變換後的畫素位置對映關係。 那麼,對於旋轉變換呢?我們可以同樣將其想象成二維平面上向量的旋轉。如下圖所示,向量[x1,y1]逆時針旋轉θθ度到了[x2,y2]。 設定向量的長度為s,根據座標系定義

已知任意平面方程,推導座標旋轉變換的結論與方法(進階篇),願願原創。

作為本部落格《已知任意平面方程,推導座標旋轉變換的結論與方法,願願原創。》(連結:https://blog.csdn.net/tom_xuzg/article/details/83034006)的姊妹篇,本文將繼續探討,座標旋轉變換,不同之處,上一篇用了三次旋轉變換,這一篇要用兩次旋轉變換。上一篇結

已知任意平面方程,推導座標旋轉變換的結論與方法(終極篇),願願原創。

本文將繼續探討,座標旋轉變換,不同之處,上兩篇各用三次,兩次旋轉變換,這一篇要用一次旋轉變換。 如下圖: 如圖,還是任意的平面方程,o2-xy面,在該平面上,如棕色和草綠色箭頭所示,我們的目標是,經過一次選擇,達到我們的o2-x‘’y‘’z‘’與o2-xyz重合的目的(也就是,棕色軸與

影象的灰度變換——影象旋轉 影象的反色處理 對比度拉伸

                這次我們要處理的是對影象進行旋轉操作,具體要求,如下:       自定義一個影象的仿射變換函式,用於旋轉給定的輸入影象,該函式的輸入引數包括處理前的影象和旋轉角度。輸入的角度為正數,表明處理結果為順時針旋轉,負數則為逆時針旋轉,輸出引數為處理後的影象。       曾參考《數

影象的灰度變換——影象旋轉影象的反色處理、對比度拉伸

這次我們要處理的是對影象進行旋轉操作,具體要求,如下:        自定義一個影象的仿射變換函式,用於旋轉給定的輸入影象,該函式的輸入引數包括處理前的影象和旋轉角度。輸入的角度為正數,表明處理結果為

座標旋轉變換公式的推導

翻譯自: http://www.metro-hs.ac.jp/rs/sinohara/zahyou_rot/zahyou_rotate.htm 翻譯:  湯 永康 出處: http://blog.csdn.NET/tangyongkang 轉貼請註明出處 1 圍繞原點的旋轉 如下圖, 在2維座標上,有一點p

matlab 影象幾何變換 平移、旋轉、縮放

1、縮放 該函式用於對影象做縮放處理。在matlab的命令視窗中輸入doc imresize或者help imresize即可獲得該函式的幫助資訊 呼叫格式 B = imresize(A, m) 返回的影象B的長寬是影象A的長寬的m倍,即縮放影象。 m大於1,則放大影象;

opencv 影象仿射變換 計算仿射變換後對應特徵點的新座標 影象旋轉、縮放、平移

常常需要最影象進行仿射變換,仿射變換後,我們可能需要將原來影象中的特徵點座標進行重新計算,獲得原來影象中例如眼睛瞳孔座標的新的位置,用於在新得到影象中繼續利用瞳孔位置座標。 關於仿射變換的詳細介紹,請見上面連結的部落格。 我這裡主要介紹如何在已經知道原影象中若干特徵點的

影象幾何變換(縮放、旋轉)中的插值演算法

轉載地址:http://blog.itpub.net/10752043/viewspace-996696/ 此篇文章講了在影象變換中基本的插值演算法(最臨近、雙線性和 三次卷積法) 實踐已證明,插值演算法對於縮放比例較小的情況是完全可以接受的,令人信服的。一般的,

常見的影象變換操作——平移變換,比例變換,對稱變換旋轉變換,投影變換

常見的影象變換操作 視窗檢視變換 使用者域:程式設計師用來定義草圖的整個自然空間WD,它是一個實數域,理論上WD是連續無限的。 視窗區:使用者指定的任一區域W,它是WD的子域,一般為矩形域。 螢幕域:裝置輸出圖形的最大區域DC,它是有限的整數域, 如:如顯示器有1600*1200個畫素。 檢視區:任何小於等於

OpenCV計算機視覺學習(11)——影象空間幾何變換影象縮放,影象旋轉影象翻轉,影象平移,仿射變換,映象變換

如果需要處理的原圖及程式碼,請移步小編的GitHub地址   傳送門:請點選我   如果點選有誤:https://github.com/LeBron-Jian/ComputerVisionPractice   影象的幾何變換是在不改變影象內容的前提下對影象畫素進行空間幾何變換,主要包括了影象的平移變換,縮放,

影象旋轉 OpenCV實現

轉自:https://www.cnblogs.com/willwu/p/6133696.html 經常對一幅影象進行旋轉操作,OpenCV中提供了很方便易用的仿射變換函式warpAffine, 通過getRotationMatrix2D可以得到放射變換矩陣(矩陣大小2x3) #include

【ACM】影象旋轉

逆時針 //影象旋轉 #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> using namespace std; int main ()

CCF篇:201503-1 影象旋轉 滿分評測

今天水題水到CCF201503-1 影象旋轉題,程式碼邏輯寫完後,測試低維資料,完全正確,可是提交結果後,只是得了80分,編譯結果時執行錯誤。如果是執行錯誤,邏輯混亂,肯定是得不了80分的,有個10分就不錯了。因此,我猜想一定時高維評測結果有問題。 剛開始,將n,m變數定義為long,結果還是8

座標旋轉變換的角度正方向。願願原創。

      第一種方法:           判斷一個旋轉變換的角度是正還是負,首先,要確定該進行變換的座標系是左手系還是右手系。拇指對準x軸正方向,食指對

PIL 影象旋轉並儲存

from PIL import Image # 讀取圖片 img = Image.open(r'./000001.jpg') # 轉化為alpha層 img_alpha = img.convert('RGBA') # 旋轉影象 rot = img_alpha.rotate(45, expand

201503-1-影象旋轉-CCF

題目:http://118.190.20.162/view.page?gpid=T27 解題思路:動態分配記憶體空間,直接模擬是得不了滿分的。 # include <stdio.h> # include <stdlib.h> # include <memory.

通過transpose和flip實現影象旋轉90/180/270度

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

CSP201503-1(影象旋轉)(Java100分)

問題描述   旋轉是影象處理的基本操作,在這個問題中,你需要將一個影象逆時針旋轉90度。   計算機中的影象表示可以用一個矩陣來表示,為了旋轉一個影象,只需要將對應的矩陣旋轉即可。 輸入格式   輸入的第一行包含兩個整數n, m,分別表示影象矩陣的行數和列數。   接下來n行

CCF201503 影象旋轉(JAVA)

問題描述: 問題描述   旋轉是影象處理的基本操作,在這個問題中,你需要將一個影象逆時針旋轉90度。   計算機中的影象表示可以用一個矩陣來表示,為了旋轉一個影象,只需要將對應的矩陣旋轉即可。 輸入格式   輸入的第一行包含兩個整數n, m,分別表示影象矩陣的