中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

OpenCV中常用圖像幾何變換有哪些

發布時間:2021-12-13 17:08:13 來源:億速云 閱讀:166 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“OpenCV中常用圖像幾何變換有哪些”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“OpenCV中常用圖像幾何變換有哪些”這篇文章吧。

0 程序環境與所學函數

本章程序運行需要導入下面三個庫,并定義了一個顯示圖像的函數

所學函數

##放大、縮小
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) # 水平垂直同時進行
##旋轉變換
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)

顯示

OpenCV中常用圖像幾何變換有哪些

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

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

顯示

OpenCV中常用圖像幾何變換有哪些

放大和縮小:resize()函數

插值方法

OpenCV中常用圖像幾何變換有哪些

程序實現

#放大縮小
#cv.resize(img,dsize,[interpolation])  dsize表示大小,[interpolation]是插值方法,可選,有默認值
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]))

顯示

OpenCV中常用圖像幾何變換有哪些

2 平移變換

原理、平移矩陣推導

OpenCV中常用圖像幾何變換有哪些

讀入圖像

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

顯示

OpenCV中常用圖像幾何變換有哪些

程序實現

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

顯示

OpenCV中常用圖像幾何變換有哪些

3 錯切變換

原理、錯切矩陣推導

OpenCV中常用圖像幾何變換有哪些

OpenCV中常用圖像幾何變換有哪些

讀入圖像

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

顯示

OpenCV中常用圖像幾何變換有哪些

水平錯切

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

顯示

OpenCV中常用圖像幾何變換有哪些

垂直錯切

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

顯示

OpenCV中常用圖像幾何變換有哪些

4 鏡像變換

原理、鏡像矩陣推導

OpenCV中常用圖像幾何變換有哪些

讀入圖像

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

顯示

OpenCV中常用圖像幾何變換有哪些

水平鏡像

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

顯示

OpenCV中常用圖像幾何變換有哪些

垂直鏡像

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

顯示

OpenCV中常用圖像幾何變換有哪些

opencv內置函數實現鏡像變換

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

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

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

程序實現

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

顯示

OpenCV中常用圖像幾何變換有哪些

5 旋轉變換

原理、旋轉矩陣推導

OpenCV中常用圖像幾何變換有哪些

OpenCV中常用圖像幾何變換有哪些

讀入圖像

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

顯示

OpenCV中常用圖像幾何變換有哪些

圖像旋轉

beta = np.pi/4
#旋轉矩陣
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中常用圖像幾何變換有哪些

opencv內置獲取旋轉矩陣函數:

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

center是旋轉中心,angle是旋轉角度,scale表示放大還是縮小

用上面函數獲取旋轉矩陣并實現圖像旋轉

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

顯示

OpenCV中常用圖像幾何變換有哪些

opencv內置實現圖像旋轉函數

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

只能進行90度倍數的旋轉

程序實現

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

顯示

OpenCV中常用圖像幾何變換有哪些

6 透視變換

M = cv.getPerspectiveTransform(str,dst)

str:原始圖像矩陣端點位置,dst:目標圖像矩陣位置

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

讀入圖像

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

顯示

OpenCV中常用圖像幾何變換有哪些

程序實現

#在原圖中定位四個點,這里找的是柱子前面四個點的大概位置,眼睛觀察法找的
str = np.array([
    [210,50],
    [610,270],
    [650,470],
    [150,450]
],dtype=np.float32)
 
#目標圖像中矩陣
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)

顯示

OpenCV中常用圖像幾何變換有哪些

應用:車道檢測、圖片矯正

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

原理:

OpenCV中常用圖像幾何變換有哪些

最近鄰插值圖示:

OpenCV中常用圖像幾何變換有哪些

雙線性插值圖示

OpenCV中常用圖像幾何變換有哪些

讀入圖像

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

顯示

OpenCV中常用圖像幾何變換有哪些

程序實現

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]))

顯示

OpenCV中常用圖像幾何變換有哪些

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

以上是“OpenCV中常用圖像幾何變換有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

莱阳市| 清水县| 嘉禾县| 崇信县| 广德县| 农安县| 池州市| 博客| 麻栗坡县| 乐至县| 泰州市| 吴堡县| 汉川市| 托克逊县| 翁源县| 酒泉市| 平度市| 定边县| 固安县| 松阳县| 黔江区| 泸定县| 白水县| 新营市| 扎鲁特旗| 武平县| 武冈市| 西平县| 建阳市| 诸城市| 巢湖市| 定兴县| 灵武市| 德阳市| 鸡泽县| 曲靖市| 韶山市| 汉中市| 海盐县| 九龙县| 西藏|