Python?OpenCV超詳細(xì)講解透視變換的實現(xiàn)
準(zhǔn)備工作
右擊新建的項目,選擇Python File,新建一個Python文件,然后在開頭import cv2
導(dǎo)入cv2庫,import numpy
并且重命名為np
。
import cv2 import numpy as np
我們還要知道在OpenCV中,坐標(biāo)軸的方向是x軸向右,y軸向下,坐標(biāo)原點在左上角,比如下面這張長為640像素,寬為480像素的圖片。OK,下面開始本節(jié)的學(xué)習(xí)吧。
場景描述
給定任意一張圖像,從中分割出你需要的區(qū)域,并且以指定的大小顯示出來。而且分割出的圖像在線性空間中還是與顯示的窗口是平行的。就比如:我想要獲取下面的K,原圖中K是斜躺著的,分割后顯示出來應(yīng)該是豎直站立的。那么該如何實現(xiàn)這樣的效果呢?
在實現(xiàn)上述效果前,我們需要獲取些重要信息,比如說上圖中撲克牌K的四個坐標(biāo)點。我們可以使用畫圖工具打開這張圖片,然后將鼠標(biāo)放置在分割區(qū)域的四個點上,即可獲取到坐標(biāo)信息。
因為畫圖中圖像的寬高坐標(biāo)軸和OpenCV是一樣的,
當(dāng)我將鼠標(biāo)放到K左上角時,畫圖的左下角就顯示出來(734像素,185像素),
這就是左上角這個點的坐標(biāo)。
透視變換
上面的要求實現(xiàn)看起來比較困難,但是用cv2庫,實現(xiàn)起來其實只有9行代碼。
- 首先我們設(shè)置下輸出圖片的寬width為250,高h(yuǎn)eight為350。
- 然后讀取我們的圖片,就是上面這張圖。
- 定義目標(biāo)區(qū)域的四個點坐標(biāo),分別為:左上、右上、左下、右下。我們在上一步已經(jīng)獲取到了。
- pst2是輸出圖片在圖片框中的位置,選擇平鋪即可,固定寫法。
- 使用庫函數(shù)
warpPerspective
實現(xiàn)透視變換,感興趣的可以深入了解下原理。 - 最后輸出并且顯示兩張圖像。
width,height=250,350 img=cv2.imread("Resources/poker.jpg") pst1=np.float32([[734,185],[1101,266],[621,679],[1030,789]]) pst2=np.float32([[0,0],[width,0],[0,height],[width,height]]) matrix=cv2.getPerspectiveTransform(pst1,pst2) imgOutput=cv2.warpPerspective(img,matrix,(width,height)) cv2.imshow("Image",img) cv2.imshow("Output",imgOutput) cv2.waitKey(0)
我們來看下效果,左圖是我們透視變換的圖像,右圖是原圖像:
第五節(jié)的內(nèi)容,其實很有趣,在生活中有很多應(yīng)用。眼過千遍不如手過一遍,快去動手敲一遍吧~
到此這篇關(guān)于Python OpenCV超詳細(xì)講解透視變換的實現(xiàn)的文章就介紹到這了,更多相關(guān)Python OpenCV 透視變換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
django 多對多表的創(chuàng)建和插入代碼實現(xiàn)
這篇文章主要介紹了django-多對多表的創(chuàng)建和插入代碼實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09Tensorflow 訓(xùn)練自己的數(shù)據(jù)集將數(shù)據(jù)直接導(dǎo)入到內(nèi)存
這篇文章主要介紹了Tensorflow 訓(xùn)練自己的數(shù)據(jù)集將數(shù)據(jù)直接導(dǎo)入到內(nèi)存,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06python機(jī)器學(xué)習(xí)實戰(zhàn)之最近鄰kNN分類器
這篇文章主要介紹了python機(jī)器學(xué)習(xí)實戰(zhàn)之最近鄰kNN分類器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12