1. 概述
為了方便開發(fā)人員的操作,OpenCV還提供了一些圖像變換的API,本篇文章講簡單介紹各種API的使用,并附上一些樣例。
2. 接口介紹
resize()
圖像縮放函數(shù),用于把圖像按指定的尺寸放大或縮小。
dst = cv2.resize(src, dsize, fx, fy, interpolation)
dst = 生成的目的圖像
src:需要變換的原圖像
disize:(x, y)需要變換圖像的尺寸,直接填
fx,fy:縮放因子,與disize會沖突,通常只需要二選一即可
interpolation:插值算法,用于縮放的算法。默認為雙線性插值。
縮放算法參數(shù)
效果越好的算法運算越復(fù)雜,效果越好。反之相反。
import cv2
import numpy as np
lina = cv2.imread('./image/lina.jpg')
print(lina.shape)
# 修改圖像大?。篺x,fy可以省略,默認為雙線性插值
lina2 = cv2.resize(lina, (700, 700))
# 使用縮放因子,需要指定參數(shù),并且dsize傳空
lina3 = cv2.resize(lina, None, fx=2, fy=2, interpolation=cv2.INTER_AREA)
cv2.imshow('lina', lina)
cv2.imshow('lina3', lina3)
cv2.waitKey(0)
flip()
圖像翻轉(zhuǎn)函數(shù),講圖像上下翻轉(zhuǎn),左右翻轉(zhuǎn)
img1 = cv2.flip(img,flipCode)
img:需要翻轉(zhuǎn)的圖片
flipCode:值為0,上下翻轉(zhuǎn);值>0,左右翻轉(zhuǎn);值<0,上下左右一起翻轉(zhuǎn)。
import cv2
import numpy as np
lina = cv2.imread('./image/lina.jpg')
print(lina.shape)
# 上下翻轉(zhuǎn)
lina_0 = cv2.flip(lina, 0)
# 左右翻轉(zhuǎn)
lina_1 = cv2.flip(lina, 1)
# 上下左右翻轉(zhuǎn)
lina_01 = cv2.flip(lina, -1)
cv2.imshow('lina', lina)
cv2.imshow('lina_0', lina_0)
cv2.imshow('lina_1', lina_1)
cv2.imshow('lina_01', lina_01)
cv2.waitKey(0)
rotate()
將圖片按順時針逆時針旋轉(zhuǎn)一定角度
img2 = cv2.rotate(img, rotateCode)
img:需要旋轉(zhuǎn)的圖片
rotateCode:含義分別為:順時針轉(zhuǎn)90,180度,逆時針轉(zhuǎn)90度。
rotateCode
import cv2
import numpy as np
lina = cv2.imread('./image/lina.jpg')
print(lina.shape)
# 順時針轉(zhuǎn)90
lina_90 = cv2.rotate(lina, cv2.ROTATE_90_CLOCKWISE)
# 順時針轉(zhuǎn)180
lina_180 = cv2.rotate(lina, cv2.ROTATE_180)
# 順時針轉(zhuǎn)270,逆時針轉(zhuǎn)90
lina_270 = cv2.rotate(lina, cv2.ROTATE_90_COUNTERCLOCKWISE)
cv2.imshow('lina', lina)
cv2.imshow('lina_90', lina_90)
cv2.imshow('lina_180', lina_180)
cv2.imshow('lina_270', lina_270)
cv2.waitKey(0)
仿射變換
仿射變換是圖像旋轉(zhuǎn)、縮放、平移的總成。
warpAffine()
img2 = cv2.warp(src, M, dsize, flags, mode, value)
src:需要變換的圖像
M:進行變換的矩陣,變換成什么樣子由M決定,可以由特定接口來求。
dsize:輸出圖像的尺寸
flags:與resize函數(shù)的縮放算法一致,默認為雙線性插值。
mode:邊界處標(biāo)志
value:填充邊界的值
后三個參數(shù)一般都用默認,主要使用前3個參數(shù)
getRotationMatrix2D()-變換矩陣1
求變換矩陣M的函數(shù),主要用于旋轉(zhuǎn)
M = cv2.getRotationMatrix2D(center, angle, scale)
center:中心點,按住哪個點進行旋轉(zhuǎn)
angle:旋轉(zhuǎn)的角度(逆時針旋轉(zhuǎn))
scale:縮放比例,1.0不縮放
import cv2
import numpy as np
lina = cv2.imread('./image/lina.jpg')
print(lina.shape)
# 變換前要求出變換矩陣
M = cv2.getRotationMatrix2D((200, 200), 30, 1.0)
lina2 = cv2.warpAffine(lina, M, (474, 474))
cv2.imshow('lina', lina)
cv2.imshow('lina2', lina2)
cv2.waitKey(0)
getAffineTransform()-變換矩陣2
求變換矩陣M,主要是用于平移+旋轉(zhuǎn),利用三個坐標(biāo)點前后變化來確定一個平面的變化
M = cv2.getAffineTransform(src[], dst[])
src:源坐標(biāo)點,以列表的形式傳入(數(shù)據(jù)格式一定為float32)
dst:變換后圖的坐標(biāo),以列表的形式傳入(數(shù)據(jù)格式一定為float32)
import cv2
import numpy as np
lina = cv2.imread('./image/lina.jpg')
print(lina.shape)
# 變換前要求出變換矩陣
# 坐標(biāo)一定要是32位的小數(shù)??!否則會報錯
src = np.float32([[0, 0], [0, 100], [100, 0]])
dst = np.float32([[50, 50], [50, 150], [200,50]])
M = cv2.getAffineTransform(src, dst)
lina2 = cv2.warpAffine(lina, M, (474, 474))
cv2.imshow('lina', lina)
cv2.imshow('lina2', lina2)
cv2.waitKey(0)
透視變換
完全改變物體的位置和形狀,需要四個坐標(biāo)點。一般用來調(diào)整圖片的位置。
warpPerspective()
用于透視變換的主函數(shù)
img2 = cv2.warpPerspective(img, M, dsize, …)
img:需要進行變換的圖像
M:進行透視變換的矩陣
dsize:輸出圖片的大小
getPerspectiveTransform()
用來求透視變換的矩陣,需要四個點
M = cv2.getPerspectiveTransform(src[], dst[])
src:源坐標(biāo)點,以列表的形式傳入(數(shù)據(jù)格式一定為float32)
dst:變換后圖的坐標(biāo),以列表的形式傳入(數(shù)據(jù)格式一定為float32)
import cv2
import numpy as np
work = cv2.imread('./image/work.jpg')
# 將圖片調(diào)整到適合大小
work = cv2.resize(work, (700, 700), interpolation=cv2.INTER_AREA)
# 設(shè)置適當(dāng)變換坐標(biāo),求出變換矩陣
src = np.float32([[210, 20], [700, 110], [0, 660], [600, 700]])
dst = np.float32([[0, 0], [700, 0], [0, 700], [700, 700]])
M = cv2.getPerspectiveTransform(src, dst)
# 進行透視變換
work2 = cv2.warpPerspective(work, M, (700, 700))
cv2.imshow('work', work)
cv2.imshow('work2', work2)
cv2.waitKey(0)
變換后如圖所示,將主要圖片變正了文章來源:http://www.zghlxwxcb.cn/news/detail-476056.html
以上就是圖像變換的簡單介紹,如果有疑問,歡迎在評論區(qū)討論哦。文章來源地址http://www.zghlxwxcb.cn/news/detail-476056.html
到了這里,關(guān)于OpenCV(圖像處理)-基于Python-圖像的基本變換-平移-翻轉(zhuǎn)-仿射變換-透視變換的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!