Python圖像處理之透視變換的實(shí)戰(zhàn)應(yīng)用
1 引言
如果你想對(duì)圖像進(jìn)行校準(zhǔn),那么透視變換是非常有效的變換手段。透視變換的定義為將圖像投影到一個(gè)新的視平面,通常也被稱之為投影映射。
2 公式
一般來(lái)說(shuō),通用的圖像變換公式如下所示:
上述公式中,u,v代表原始圖像坐標(biāo),x,y為經(jīng)過(guò)透視變換的圖片坐標(biāo),其中變換矩陣為3X3形式。進(jìn)而可以得到:
3 舉例
在介紹opencv的透視變換函數(shù)之前,我們舉例來(lái)講解該算法的原理:
直觀的來(lái)看,透視變換的作用就是將左側(cè)圖像的坐標(biāo)點(diǎn)
[[50,0],[150,0],[0,200],[200,200]]
轉(zhuǎn)化為新的坐標(biāo)
[[0,0],[200,0],[0,200],[200,200]]
通過(guò)計(jì)算我們知道,轉(zhuǎn)換矩陣如下:
我們來(lái)驗(yàn)證一下,采用左上角的點(diǎn)(50,0)帶入公式,如下:
接著我們將列向量的前兩維度除以第三維執(zhí)行歸一化:
所以我們知道原圖左上角點(diǎn)執(zhí)行透視變換后的映射關(guān)系:
4 應(yīng)用
本文以撲克牌的例子來(lái)進(jìn)行講解,樣例結(jié)果如下:
4.1 讀入圖像
首先我們來(lái)讀入一副彩色圖像,如下:
import cv2 import numpy as np img = cv2.imread("image/sample.jpg") h, w, c = img.shape # h=240 w=320
4.2 挑選源圖四個(gè)點(diǎn)
接著我們需要挑選四個(gè)點(diǎn),我們這里采用左上,左下,右下和右上,下面的代碼把我們挑選的四個(gè)點(diǎn)畫到圖像上
src_list = [(61, 70), (151, 217), (269, 143), (160, 29)] for i, pt in enumerate(src_list): cv2.circle(img, pt, 5, (0, 0, 255), -1) cv2.putText(img,str(i+1),(pt[0]+5,pt[1]+10),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2) pts1 = np.float32(src_list)
結(jié)果如下:
4.3 進(jìn)行透視變換
首先選擇四個(gè)目的圖像上的點(diǎn),然后調(diào)用openv函數(shù)進(jìn)行透視變換,代碼如下:
pts2 = np.float32([[0, 0], [0, w - 2], [h - 2, w - 2], [h - 2, 0]]) matrix = cv2.getPerspectiveTransform(pts1, pts2) result = cv2.warpPerspective(img, matrix, (h, w)) cv2.imshow("Image", img) cv2.imshow("Perspective transformation", result) cv2.waitKey(0)
得到結(jié)果如下:
5 應(yīng)用
我們?cè)趯?shí)際應(yīng)用中,可以使用透視變換來(lái)替換廣告牌中對(duì)應(yīng)的背景圖,結(jié)果如下:
廣告牌:
Logo圖:
結(jié)果圖:
6 總結(jié)
本文介紹了圖像處理透視變換的原理和具體代碼實(shí)現(xiàn),并給出了具體應(yīng)用示例。
到此這篇關(guān)于Python圖像處理之透視變換的文章就介紹到這了,更多相關(guān)Python圖像透視變換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
7 參考
相關(guān)文章
Python中用altzone()方法處理時(shí)區(qū)的教程
這篇文章主要介紹了Python中用altzone()方法處理時(shí)區(qū)的教程,是Python入門中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05Python提取PDF發(fā)票信息保存Excel文件并制作EXE程序的全過(guò)程
之前零散的用過(guò)一點(diǎn)python做數(shù)據(jù)處理,這次又遇到一個(gè)數(shù)據(jù)處理的小功能,下面這篇文章主要給大家介紹了關(guān)于Python提取PDF發(fā)票信息保存Excel文件并制作EXE程序的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11Qt通過(guò)QGraphicsview實(shí)現(xiàn)簡(jiǎn)單縮放及還原效果
本文主要介紹通過(guò)QGraphicsview實(shí)現(xiàn)簡(jiǎn)單的縮放以及縮放后還原原始大小,通過(guò)scale可以對(duì)view進(jìn)行放大或縮小,具體內(nèi)容詳情跟隨小編一起看看吧2021-09-09使用Python實(shí)現(xiàn)Office文檔(Word/Excel/PowerPoint)批量轉(zhuǎn)換為PDF
在處理不同格式的Office文檔(如Word、Excel和PowerPoint)時(shí),將其轉(zhuǎn)換為PDF格式是常見(jiàn)的需求,本文就跟隨小編來(lái)看看如何使用Python將Word/Excel/PowerPoint批量轉(zhuǎn)換為PDF吧2024-10-10使用Python中的Argparse實(shí)現(xiàn)將列表作為命令行參數(shù)傳遞
Argparse?是一個(gè)?Python?庫(kù),用于以用戶友好的方式解析命令行參數(shù),本文我們將討論如何使用?Python?中的?Argparse?庫(kù)將列表作為命令行參數(shù)傳遞,感興趣的可以了解下2023-08-08Blender?Python編程實(shí)現(xiàn)批量導(dǎo)入網(wǎng)格并保存渲染圖像
這篇文章主要為大家介紹了Blender?Python?編程實(shí)現(xiàn)批量導(dǎo)入網(wǎng)格并保存渲染圖像示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08一文詳細(xì)介紹Python中的OrderedDict對(duì)象
OrderedDict是Python標(biāo)準(zhǔn)庫(kù)collections模塊的一部分,下面這篇文章主要給大家介紹了關(guān)于Python中OrderedDict對(duì)象的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08Django-Xadmin后臺(tái)首頁(yè)添加小組件報(bào)錯(cuò)的解決方案
這篇文章主要介紹了Django-Xadmin后臺(tái)首頁(yè)添加小組件報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08PyCharm調(diào)用matplotlib繪圖時(shí)圖像彈出問(wèn)題詳解
這篇文章主要給大家介紹了關(guān)于PyCharm調(diào)用matplotlib繪圖時(shí)圖像彈出問(wèn)題的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用PyCharm具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-07-07tensorflow使用神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)mnist分類
這篇文章主要為大家詳細(xì)介紹了tensorflow使用神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)mnist分類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09