使用OpenCV實現仿射變換 平移功能

2022-09-28 21:12:28 字數 1806 閱讀 7775

當我們開啟乙個編輯軟體時,基本上都會提供幾個操作:平移、縮放和旋轉。特別目前在手機裡拍照時,由於位置程式設計客棧感測器的失靈,也許是軟體的bug,有一次我就遇到蘋果手機不管怎麼樣豎放,或橫放,它拍攝的**就豎不起來,後來只有關機重啟才解決。這樣拍攝出來的**,如果要改變方向,只能使用編輯功能了,進行旋轉。因此,幾何變換的功能,在現實生活裡的需求程式設計客棧必不可少。

為了理解這個幾何的問題,可以來回憶一下初中的課本內容:

從這裡可以看到平移的基本性質,有了這些概念之後,就要進入解釋幾何,平移的表達,比如往x軸移動100,那麼就是x+100,因此平移的公式就是(x1, y1)=(x+a, y+b),如下圖所示:

從這個線性方程組來看,是乙個二元的關係,再轉換為矩陣的表示方式,你會發現使用的方式是如下:

在這裡發現是使用三維矩陣來表示,為什麼要這樣呢?其實是為了把三種變換統一到一種表示方式,公升維思想的作用。因此矩陣第三行沒有什麼作用的,如果乙個影象要作平移,只要構造出變換矩陣,再作這個計算,就可以把座標進行改變了,所以要平移的距離是由tx和ty決定。為了統一,旋轉、縮放、平移都可以使用乙個公式來表示和計算,這是公升到三維陣列的好處。同樣在三維空間的變換,也是採用四維變換矩陣。下面通例子來演示影象平移的操作:

#python 3.7.4,opencv4.1

#蔡軍生 ht

#import cv2

import numpy as np

#的路徑

#讀取image = cv2.imread(imgname, cv2.imread_color)

#的高度和寬度

h,w = image.shape[:2]

#構造平移的2x3的矩陣,然後呼叫warpaffine執行平移

a1 = np.array([[1, 0, 50], [0, 1, 40]], np.float32)

d1 = cv2.warpaff a1, (w, h), bordervalue = 125)

#顯示平移之後的

cv2.imshow("d1",d1)

#顯示影象

cv2.imshow("image", image)

#等待使用者輸入,然後刪除所有視窗

cv2.waitkey(0)

cv2.destroyallwindows()

執行的結果如下:

左圖是平移之後的,在左程式設計客棧上角出現了一片空白,使用了固定顏色填充,右圖是原始。

在這裡主要使用cv2.warpaffine函式,這個函式定義如下:

cv2.warpaffine(src, m, dsize[, dst[, flags[, bordermode[, bordervalue]]]]) → dst

其中:src - 輸入影象。

m - 變換矩陣。

dsize - 輸出影象的大小。

flags - 插值方法的組合(int 型別!)

bordermode - 邊界畫素模式(int 型別!)

bordervalue - 邊界填充值; 預設情況下,它為0。

上述引數中:m作為仿射變換矩陣,一般反映平移或旋轉的關係,為inputarray型別的23的變換矩陣。

flages表示插值方式,預設為 flags=cv2.inter_linear,表示線性插值,此外還有:cv2.inter_nearest(最近鄰插值) cv2.inter_area (區域插值) cv2.inter_cubic(三次樣條插值) cv2.inter_lanczos4(lanczos插值)

到這裡學會了使用opencv中仿射變換的平移功能。

總結本文標題: 使用opencv實現仿射變換—平移功能

本文位址:

OpenCV實現仿射變換

乙個任意的仿射變換都能表示為 乘以乙個矩陣 線性變換 接著再 加上乙個向量 平移 綜上所述,我們能夠用仿射變換來表示 旋轉 線性變換 平移 向量加 縮放操作 線性變換 你現在可以知道,事實上,仿射變換代表的是兩幅圖之間的關係.全域性變數 char source window source image...

OpenCV 仿射變換

一 仿射變換 仿射變換是一種二維座標之間的變換,變換前後保持圖形的平直性和平行性。仿射變換可以理解為是向量經過一次線性變換和一次平移變換。void warpaffine inputarray src,outputarray dst,inputarray m,size dsize,int flags ...

opencv 仿射變換

仿射變換的兩種方式 1 利用變換前後的三個座標點達到變換目的。2 使用旋轉角度和縮放倍數來變換。在實際的使用中,採用1的方式比較方便,但是有乙個問題 變換之後的矩陣大小該如何正確設定,如果設定大小不合適,會導致圖的實際區域超出邊界。所以在此記錄一下解決辦法。思路 由於已知了變換前後的三個座標點,可以...