詳解python-圖像處理(映射變換)
做計算機視覺方向,除了流行的各種深度學(xué)習(xí)算法,很多時候也要會基礎(chǔ)的圖像處理方法。
記錄下opencv的一些操作(圖像映射變換),日后可以方便使用
先上一張效果圖

圖二和圖三是同一種方法,只是變換矩陣不同,都是3點映射變換
圖四使用的是4點映射變換
簡單介紹下原理
圖像都知道是3維(通道)的矩陣,前兩維就是由1字節(jié)(0-255)數(shù)字填充的二維數(shù)組。數(shù)字大小代表顏色的深淺。
我們把變換前的原圖作為x和y。變換后的圖為u和v。將[x,y,1]乘上變換矩陣就可以得到對應(yīng)的新的u和v。不同的變換矩陣有不同的作用(不同的變換方式)

所以現(xiàn)在就是求不同變換對應(yīng)的不同的變換矩陣的過程
求這個矩陣 在opencv中直接就有方法
只需提供原圖的三個點和你要變換之后的三個點的映射位置(3個原圖點,3個映射點)就可以求出這個變換矩陣

當(dāng)然了 你會發(fā)現(xiàn)不管怎么調(diào)整映射點 都不能任意變換
因為只給三個點時 變換之后的圖其實只是原圖的等比縮放,并不能做到隨意映射的效果
這里opencv也提供了 四個點和四個映射的方法 求出對應(yīng)的變換矩陣 ,最終得到任意映射的效果

代碼如下:
# coding=gbk
import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標簽
plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號
img=cv2.imread(r"test6.jpg")
img = img[:,:,[2,1,0]]
cols,rows,ch=img.shape
pts1 = np.float32([[0, 0], [cols - 1, 0], [0, rows - 1]]) #三點映射
pts2 = np.float32([[0, 0], [cols - 1, 0], [80, rows - 1]])
pts21 = np.float32([[0, 0], [cols - 1, 0], [0, rows - 1]])
pts22 = np.float32([[cols * 0.2, rows * 0.1], [cols * 0.9, rows * 0.2], [cols * 0.1, rows * 0.9]])
pts31 = np.float32([[0, 0], [cols - 1, 0], [0, rows - 1],[cols - 1,rows-1]]) #四點映射
pts32 = np.float32([[0, 0], [cols - 1, 0], [50, rows - 1],[cols - 50,rows-50]])
M = cv2.getAffineTransform(pts1,pts2) #求三點映射的變換矩陣
M2= cv2.getAffineTransform(pts21,pts22)
M3 = cv2.getPerspectiveTransform(pts31,pts32) #求四點映射的變換矩陣
dst = cv2.warpAffine(img,M,(rows+120,cols)) #三點映射的變換函數(shù)
dst2 = cv2.warpAffine(img,M2,(rows,cols))
dst3 = cv2.warpPerspective(img,M3,(rows+40,cols+50)) #四點映射的變換函數(shù)
plt.subplot(221)
plt.imshow(img)
plt.title("原圖")
plt.subplot(222)
plt.imshow(dst)
plt.title("投影變換")
plt.subplot(223)
plt.imshow(dst2)
plt.title("仿射原圖變換")
plt.subplot(224)
plt.imshow(dst3)
plt.title("仿射不規(guī)則變換")
plt.show()
以上所述是小編給大家介紹的python-圖像處理(映射變換)詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
numpy 中l(wèi)inspace函數(shù)的使用
本文主要介紹了numpy 中l(wèi)inspace函數(shù)的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Python中的getter與setter及deleter使用示例講解
這篇文章主要介紹了Python中的getter與setter及deleter使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01
python實現(xiàn)從文件中讀取數(shù)據(jù)并繪制成 x y 軸圖形的方法
今天小編就為大家分享一篇python實現(xiàn)從文件中讀取數(shù)據(jù)并繪制成 x y 軸圖形的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10

