欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

OpenCV圖像處理之七種常用圖像幾何變換

 更新時間:2021年12月13日 16:32:13   作者:JeffchenITM  
這篇文章主要介紹了OpenCV圖像處理中常用的幾個圖像幾何變換:裁剪、放大、縮小、平移、錯切、鏡像、旋轉(zhuǎn)、透視等。文中示例代碼非常詳細(xì),需要的朋友可以參考一下

0 程序環(huán)境與所學(xué)函數(shù)

本章程序運(yùn)行需要導(dǎo)入下面三個庫,并定義了一個顯示圖像的函數(shù)

所學(xué)函數(shù)

##放大、縮小
cv.resize(img,dsize,[interpolation])
##平移變換
M = np.array([[...]], dtype=np.float32)
cv.warpAffine(img, M, dsize)
##鏡像變換
cv.flip(img, 1) # 垂直鏡像
cv.flip(img, 0) # 水平鏡像
cv.flit(img, -1) # 水平垂直同時進(jìn)行
##旋轉(zhuǎn)變換
M = cv.getRotationMatrix2D(center, angle, scale)
img_rotate = cv.rotate(img, cv.ROTATE_90_CLOCKWISE)
##透視變換
M = cv.getPerspectiveTransform(src, dst)
img = cv.warpPerspective(img, M, dsize)

1 裁剪、放大、縮小

讀入圖像

img =  cv.imread('pic/rabbit500x333.jpg')
show(img)

顯示

裁剪:數(shù)組選擇方法(冒號)

#裁剪
rabbit = img[150:450:] #限定行數(shù),列數(shù)和三通道
show(rabbit)

顯示

放大和縮小:resize()函數(shù)

插值方法

程序?qū)崿F(xiàn)

#放大縮小
#cv.resize(img,dsize,[interpolation])  dsize表示大小,[interpolation]是插值方法,可選,有默認(rèn)值
img2 = cv.resize(img,(500,400))  #放大為寬500高400
#使用定義插值方法
#一般來說放大地話選擇LINEAR方法,縮小選擇AREA方法
img3 = cv.resize(img,(500,400),interpolation=cv.INTER_NEAREST)
show(np.hstack([img2,img3]))

顯示

2 平移變換

原理、平移矩陣推導(dǎo)

讀入圖像

img = cv.imread('pic/rabbit500x333.jpg')
show(img)

顯示

程序?qū)崿F(xiàn)

# M = np.array([[...]],dtype=np.float32) 
# cv.warAffine(img,M,dsize) cv里面圖像仿射變換函數(shù),M是上面矩陣,dsize是輸出圖像大小
M=np.array([
    [1,0,100],
    [0,1,50]
],dtype=np.float32)  #水平向右平移100個像素點(diǎn),豎直向下平移50個像素點(diǎn),原理見理論部分
 
img2 = cv.warpAffine(img,M,(333,500))
show(img2)

顯示

3 錯切變換

原理、錯切矩陣推導(dǎo)

讀入圖像

img = cv.imread('pic/rabbit500x333.jpg')
show(img)

顯示

水平錯切

M = np.array([
    [1,0.2,0],
    [0,1,0]
],dtype=np.float32)
 
img3 = cv.warpAffine(img,M,(533,500))
show(img3)

顯示

垂直錯切

M = np.array([
    [1,0,0],
    [0.3,1,0]
],dtype=np.float32)
 
img3 = cv.warpAffine(img,M,(333,700))
show(img3)

顯示

4 鏡像變換

原理、鏡像矩陣推導(dǎo)

讀入圖像

img = cv.imread('pic/rabbit500x333.jpg')
show(img)

顯示

水平鏡像

Mx = np.array([
    [-1,0,333],
    [0,1,0]
],dtype = np.float32)
img2 = cv.warpAffine(img,Mx,(333,500))  #仿射變換函數(shù)
show(img2)

顯示

垂直鏡像

My = np.array([
    [1,0,0],
    [0,-1,500]
],dtype=np.float32)
 
img3 = cv.warpAffine(img,My,(333,500))
show(img3)

顯示

opencv內(nèi)置函數(shù)實現(xiàn)鏡像變換

#垂直鏡像 cv.flip(img,1)

#水平鏡像 cv.flip(img,0)

#水平垂直同時進(jìn)行 cv.flip(img,-1)

程序?qū)崿F(xiàn)

img4 = cv.flip(img,1)  #垂直鏡像
img5 = cv.flip(img,0)  #水平鏡像
img6 = cv.flip(img,-1) #水平垂直鏡像同時進(jìn)行
 
show(np.hstack([img4,img5,img6]))

顯示

5 旋轉(zhuǎn)變換

原理、旋轉(zhuǎn)矩陣推導(dǎo)

讀入圖像

img = cv.imread('pic/rabbit500x333.jpg')
show(img)

顯示

圖像旋轉(zhuǎn)

beta = np.pi/4
#旋轉(zhuǎn)矩陣
M  = np.array([
    [np.cos(beta),np.sin(beta),0],
    [-np.sin(beta),np.cos(beta),0]
],dtype=np.float32)
 
img2 = cv.warpAffine(img,M,(633,300))
show(img2)

顯示

opencv內(nèi)置獲取旋轉(zhuǎn)矩陣函數(shù):

M = cv.getRotationMatrix2D(center,angle,scale)??

center是旋轉(zhuǎn)中心,angle是旋轉(zhuǎn)角度,scale表示放大還是縮小

用上面函數(shù)獲取旋轉(zhuǎn)矩陣并實現(xiàn)圖像旋轉(zhuǎn)

h,w,c = img.shape  #獲取圖像的高度和寬度,方便后面設(shè)置旋轉(zhuǎn)中心
 
M2 = cv.getRotationMatrix2D((w//2,h//2),45,1)
img3 = cv.warpAffine(img,M2,(533,500))  #仿射函數(shù)實現(xiàn)
show(img3

顯示

opencv內(nèi)置實現(xiàn)圖像旋轉(zhuǎn)函數(shù)

img_rotate =cv.rotate(img,cv.ROTATE_90_COUNTERCLOCKWISE)

只能進(jìn)行90度倍數(shù)的旋轉(zhuǎn)

程序?qū)崿F(xiàn)

# 逆時針旋轉(zhuǎn)90度
img_rotate = cv.rotate(img,cv.ROTATE_90_COUNTERCLOCKWISE)
show(img_rotate)
 

顯示

6 透視變換

M = cv.getPerspectiveTransform(str,dst)

str:原始圖像矩陣端點(diǎn)位置,dst:目標(biāo)圖像矩陣位置

img2 = cv.warpPerspective(img,M,(w,h))

讀入圖像

img = cv.imread('pic/parthenon500x750.jpg')
show(img)

顯示

程序?qū)崿F(xiàn)

#在原圖中定位四個點(diǎn),這里找的是柱子前面四個點(diǎn)的大概位置,眼睛觀察法找的
str = np.array([
    [210,50],
    [610,270],
    [650,470],
    [150,450]
],dtype=np.float32)
 
#目標(biāo)圖像中矩陣
dst = np.array([
    [150,50],
    [650,50],
    [650,470],
    [150,470]
],dtype=np.float32)
 
h,w,c = img.shape
 
#透視變換將一個類似矩形的圖形拉成一個矩形
M = cv.getPerspectiveTransform(str,dst)
img2 = cv.warpPerspective(img,M,(w,h))
show(img2)

顯示

應(yīng)用:車道檢測、圖片矯正

7 最近鄰插值、雙線性插值

原理:

最近鄰插值圖示:

雙線性插值圖示

讀入圖像

img = cv.imread('pic/rabbit50x33.jpg')
show(img)

顯示

程序?qū)崿F(xiàn)

img1 = cv.resize(img,(330,500),interpolation=cv.INTER_NEAREST) #最近鄰插值
img2 = cv.resize(img,(330,500),interpolation=cv.INTER_LINEAR_EXACT) #精確雙線新插值
 
show(np.hstack([img1,img2]))

顯示

可以看出最近鄰插值還是比較模糊的,過渡結(jié)果沒有雙線性插值平滑

以上就是OpenCV圖像處理之七種常用圖像幾何變換的詳細(xì)內(nèi)容,更多關(guān)于OpenCV 圖像幾何變換的資料請關(guān)注腳本之家其它相關(guān)文章!

  • 使用python讀取.text文件特定行的數(shù)據(jù)方法

    使用python讀取.text文件特定行的數(shù)據(jù)方法

    今天小編就為大家分享一篇使用python讀取.text文件特定行的數(shù)據(jù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python中的Numpy?面向數(shù)組編程常見操作

    Python中的Numpy?面向數(shù)組編程常見操作

    這篇文章主要介紹了Python中的Numpy?面向數(shù)組編程常見操作,使用Numpy數(shù)組可以使你利用簡單的數(shù)組表達(dá)式完成多項數(shù)據(jù)操作任務(wù),而不需要編寫大量的循環(huán),這個極大的幫助了我們高效的解決問題
    2022-07-07
  • Python 3.10 中 6 個興奮的新特性

    Python 3.10 中 6 個興奮的新特性

    Python 是當(dāng)今最流行的編程語言之一其流行的原因有很多種,Python 3.10 有幾個新的很酷的功能,使得使用 Python 成為一種更好的體驗。在本文中,我將與您分享 6 個讓我最興奮的新特性,感興趣的朋友一起看看吧
    2021-10-10
  • python中使用while循環(huán)的實例

    python中使用while循環(huán)的實例

    在本篇內(nèi)容里小編給各位整理的是關(guān)于python中使用while循環(huán)的實例以及相關(guān)知識點(diǎn),需要的朋友們學(xué)習(xí)下。
    2019-08-08
  • Python requests和httpx實例詳解

    Python requests和httpx實例詳解

    這篇文章主要介紹了Python requests和httpx的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-12-12
  • Python基于Opencv識別兩張相似圖片

    Python基于Opencv識別兩張相似圖片

    這篇文章主要介紹了Python基于Opencv識別兩張相似圖片的步驟,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • Python 一句話生成字母表的方法

    Python 一句話生成字母表的方法

    今天小編就為大家分享一篇Python 一句話生成字母表的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python依賴管理及打包工具Poetry使用規(guī)范

    Python依賴管理及打包工具Poetry使用規(guī)范

    這篇文章主要為大家介紹了Python依賴管理及打包工具Poetry的依賴規(guī)范,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-09-09
  • 如何將Pycharm中Terminal使用Powershell作為終端

    如何將Pycharm中Terminal使用Powershell作為終端

    這篇文章主要介紹了如何將Pycharm中Terminal使用Powershell作為終端問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 最新評論