新聞中心
OpenCV Python實現(xiàn)旋轉(zhuǎn)矩形的裁剪
環(huán)境
在伊川等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、成都做網(wǎng)站 網(wǎng)站設(shè)計制作按需設(shè)計,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),營銷型網(wǎng)站,成都外貿(mào)網(wǎng)站建設(shè),伊川網(wǎng)站建設(shè)費用合理。
矩形操作是我們在 OpenCV 里最常用的操作,其中最為常見的就是包圍框( Bounding Box )和旋轉(zhuǎn)矩形( Rotated Box )。 其中包圍框是最為常見的,對應(yīng) OpenCV 中的 boundingRect() ,使用正矩形框處物體,一般多用在目標(biāo)檢測中。使用包圍框框柱目標(biāo)物體,這種操作比較簡單,但是通常框中也會有一些其他的區(qū)域。其次就是使用旋轉(zhuǎn)矩形,也叫最小外接矩形,對應(yīng) OpenCV 中的 minAreaRect() ,用來使用旋轉(zhuǎn)矩形最大限度的框出目標(biāo)物體,減小背景干擾,在 OCR 任務(wù)中較為常用。
minAreaRect() 返回了所需區(qū)域的最小斜矩形的參數(shù),與包圍框直接返回四個頂點的坐標(biāo)不同,最小外接矩形返回的是矩形的 ((x, y), (w, h), angle) ,對應(yīng)了矩形的中心,寬度,高度和旋轉(zhuǎn)角度。
旋轉(zhuǎn)角度 angle 是水平軸( x 軸)逆時針旋轉(zhuǎn),與碰到的矩形的第一條邊的夾角。并且這個邊的邊長是 width ,另一條邊邊長是 height 。也就是說,在這里 width 與 height 不是按照長短來定義的。
在 OpenCV 中,坐標(biāo)系原點在左上角,相對于 x 軸,逆時針旋轉(zhuǎn)角度為負(fù),順時針旋轉(zhuǎn)角度為正,所以函數(shù) minAreaRect() 返回的角度范圍時 [-90~0) 。想象一個平放的長矩形,調(diào)用 minAreaRect() 返回的角度為 -90 度。如果我們旋轉(zhuǎn)圖像,直到矩形樹立起來,這是調(diào)用 minAreaRect() 得到的角度依然是 -90 度。
第一種裁剪旋轉(zhuǎn)矩形的方法是通過仿射變換旋轉(zhuǎn)圖像的方式。
仿射變換( Affine Transformation ) 是一種二維坐標(biāo)到二維坐標(biāo)之間的線性變換,保持二維圖形的“平直性”( straightness ,即變換后直線還是直線不會打彎,圓弧還是圓弧)和“平行性”( parallelness ,其實是指保二維圖形間的相對位置關(guān)系不變,平行線還是平行線,相交直線的交角不變。)。
計算過程:
如果不做邊長和角度的判斷,則只會沿著 x 軸的順時針方向做相同大小角度的旋轉(zhuǎn),不能保證旋轉(zhuǎn)后的視角是正確的視角:
根據(jù)任務(wù)目標(biāo)的類型,做邊長和角度的判斷并進行相應(yīng)的調(diào)整,可以保證旋轉(zhuǎn)后的視角是正確的視角:
第二種裁剪旋轉(zhuǎn)矩形的方法是通過透視變換直接將旋轉(zhuǎn)矩形的四個頂點映射到正矩形的四個頂點。
透視變換( Perspective Transformation )是將圖片投影到一個新的視平面( Viewing Plane ),也稱作投影映射( Projective Mapping )。
計算過程:
以上兩種方法都可以用來摳取旋轉(zhuǎn)矩形的內(nèi)容。仿射變換方法需要預(yù)先對整張圖進行旋轉(zhuǎn),通過觀察旋轉(zhuǎn)后的圖像可以發(fā)現(xiàn),有一部分圖像被旋轉(zhuǎn)出了圖像邊界,如果你要摳取的目標(biāo)正好在圖像邊緣附近,那么很容易出界導(dǎo)致圖像摳取的缺失。同時我們需要對寬、高和角度做出動態(tài)的調(diào)整;透視變換的方法直接對摳取區(qū)域進行了映射,這種方法可以省略旋轉(zhuǎn)的步驟,并且不會出現(xiàn)摳取內(nèi)容的缺失。同時我們只需要對4個頂點之間的映射關(guān)系做好定義即可,不需要考慮角度的問題。相對的,透視變換相對于仿射變換計算量更大一些,不過這在 c++ 的底層實現(xiàn)上帶來的時延差距小于 ms 。
python PIL如何才能把圖片修改成正方形或者任意尺寸而不產(chǎn)生擠壓
改變圖像尺寸有兩類方法:
一是縮放(resize),即重采樣。這時,如果圖像縱橫比發(fā)生變化就會導(dǎo)致“擠壓”。
二是裁剪(crop)。當(dāng)然圖只能越裁越小;不過可以配合縮放,先放大再裁剪。
既然題主要求不能“擠壓”,那就只能裁剪了。函數(shù)名我給出來了,具體用法題主自己研究。
python 截取指定字符前后的所有字符的函數(shù)
可以參考下面的代碼:
#!/usr/bin/python
# encoding: utf-8
# filename: baiduzhidao.py
ln = "4564612131856+654654654654"
print ln.split("+")
#~ Result:
#~ python -u "baiduzhidao.py"
#~ ['4564612131856', '654654654654']
#~ Exit code: 0? ? Time: 0.052
Python在設(shè)計上堅持了清晰劃一的風(fēng)格,這使得Python成為一門易讀、易維護,并且被大量用戶所歡迎的、用途廣泛的語言,設(shè)計者開發(fā)時總的指導(dǎo)思想是,對于一個特定的問題,只要有一種最好的方法來解決就好了。
Python本身被設(shè)計為可擴充的。并非所有的特性和功能都集成到語言核心。Python提供了豐富的API和工具,以便程序員能夠輕松地使用C語言、C++、Cython來編寫擴充模塊。
Python是完全面向?qū)ο蟮恼Z言。函數(shù)、模塊、數(shù)字、字符串都是對象。并且完全支持繼承、重載、派生、多繼承,有益于增強源代碼的復(fù)用性。
擴展資料:
python參考函數(shù)
vars(obj) 返回一個object的name space。用dictionary表示
locals() 返回一個局部name space,用dictionary表示
globals() 返回一個全局name space,用dictionary表示
type(obj) 查看一個obj的類型
isinstance(obj,cls) 查看obj是不是cls的instance
issubclass(subcls,supcls) 查看subcls是不是supcls的子類
參考資料來源:百度百科-Python (計算機程序設(shè)計語言)
分享文章:python裁剪函數(shù) python裁剪不規(guī)則區(qū)域
標(biāo)題來源:http://www.ef60e0e.cn/article/dogjosd.html