詳解python-圖像處理(映射變換)
做計(jì)算機(jī)視覺方向,除了流行的各種深度學(xué)習(xí)算法,很多時(shí)候也要會(huì)基礎(chǔ)的圖像處理方法。
記錄下opencv的一些操作(圖像映射變換),日后可以方便使用
先上一張效果圖
圖二和圖三是同一種方法,只是變換矩陣不同,都是3點(diǎn)映射變換
圖四使用的是4點(diǎn)映射變換
簡(jiǎn)單介紹下原理
圖像都知道是3維(通道)的矩陣,前兩維就是由1字節(jié)(0-255)數(shù)字填充的二維數(shù)組。數(shù)字大小代表顏色的深淺。
我們把變換前的原圖作為x和y。變換后的圖為u和v。將[x,y,1]乘上變換矩陣就可以得到對(duì)應(yīng)的新的u和v。不同的變換矩陣有不同的作用(不同的變換方式)
所以現(xiàn)在就是求不同變換對(duì)應(yīng)的不同的變換矩陣的過程
求這個(gè)矩陣 在opencv中直接就有方法
只需提供原圖的三個(gè)點(diǎn)和你要變換之后的三個(gè)點(diǎn)的映射位置(3個(gè)原圖點(diǎn),3個(gè)映射點(diǎn))就可以求出這個(gè)變換矩陣
當(dāng)然了 你會(huì)發(fā)現(xiàn)不管怎么調(diào)整映射點(diǎn) 都不能任意變換
因?yàn)橹唤o三個(gè)點(diǎn)時(shí) 變換之后的圖其實(shí)只是原圖的等比縮放,并不能做到隨意映射的效果
這里opencv也提供了 四個(gè)點(diǎn)和四個(gè)映射的方法 求出對(duì)應(yīng)的變換矩陣 ,最終得到任意映射的效果
代碼如下:
# coding=gbk import cv2 import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] #用來(lái)正常顯示中文標(biāo)簽 plt.rcParams['axes.unicode_minus']=False #用來(lái)正常顯示負(fù)號(hào) 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]]) #三點(diǎn)映射 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]]) #四點(diǎn)映射 pts32 = np.float32([[0, 0], [cols - 1, 0], [50, rows - 1],[cols - 50,rows-50]]) M = cv2.getAffineTransform(pts1,pts2) #求三點(diǎn)映射的變換矩陣 M2= cv2.getAffineTransform(pts21,pts22) M3 = cv2.getPerspectiveTransform(pts31,pts32) #求四點(diǎn)映射的變換矩陣 dst = cv2.warpAffine(img,M,(rows+120,cols)) #三點(diǎn)映射的變換函數(shù) dst2 = cv2.warpAffine(img,M2,(rows,cols)) dst3 = cv2.warpPerspective(img,M3,(rows+40,cols+50)) #四點(diǎn)映射的變換函數(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-圖像處理(映射變換)詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- python matplotlib imshow熱圖坐標(biāo)替換/映射實(shí)例
- python 實(shí)現(xiàn)12bit灰度圖像映射到8bit顯示的方法
- Python匿名函數(shù)/排序函數(shù)/過濾函數(shù)/映射函數(shù)/遞歸/二分法
- Python字典中的鍵映射多個(gè)值的方法(列表或者集合)
- Python簡(jiǎn)單實(shí)現(xiàn)的代理服務(wù)器端口映射功能示例
- Python實(shí)現(xiàn)TCP協(xié)議下的端口映射功能的腳本程序示例
- 詳解Python中映射類型的內(nèi)建函數(shù)和工廠函數(shù)
- Python3 mmap內(nèi)存映射文件示例解析
相關(guān)文章
linux系統(tǒng)使用python監(jiān)測(cè)系統(tǒng)負(fù)載腳本分享
這篇文章主要介紹了linux系統(tǒng)使用python監(jiān)測(cè)系統(tǒng)負(fù)載腳本,大家參考使用吧2014-01-01python+pytest接口自動(dòng)化參數(shù)關(guān)聯(lián)
這篇文章主要介紹了python+pytest接口自動(dòng)化參數(shù)關(guān)聯(lián),參數(shù)關(guān)聯(lián),也叫接口關(guān)聯(lián),即接口之間存在參數(shù)的聯(lián)系或依賴,更多相關(guān)內(nèi)容需要的小伙伴可可以參考一下2022-06-06Python的Flask框架中實(shí)現(xiàn)簡(jiǎn)單的登錄功能的教程
這篇文章主要介紹了Python的Flask框架中實(shí)現(xiàn)簡(jiǎn)單的登錄功能的教程,登錄是各個(gè)web框架中的基礎(chǔ)功能,需要的朋友可以參考下2015-04-04Python的Flask框架中集成CKeditor富文本編輯器的教程
在用Flask搭建網(wǎng)站時(shí)的后臺(tái)文章編輯器可以使用CKeditor,CKeditor所支持的文本樣式較多且開源,這里我們就來(lái)看一下Python的Flask框架中集成CKeditor富文本編輯器的教程2016-06-06python常用數(shù)據(jù)結(jié)構(gòu)元組詳解
這篇文章主要介紹了python常用數(shù)據(jù)結(jié)構(gòu)元組詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08python實(shí)現(xiàn)GATK多線程加速示例
這篇文章主要為大家介紹了python實(shí)現(xiàn)GATK多線程加速示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07python實(shí)現(xiàn)在windows服務(wù)中新建進(jìn)程的方法
這篇文章主要介紹了python實(shí)現(xiàn)在windows服務(wù)中新建進(jìn)程的方法,涉及Python針對(duì)Windows服務(wù)與進(jìn)程操作的相關(guān)技巧,需要的朋友可以參考下2015-06-06