【opencv+python】圖像的基本操作:縮放、剪切、位移、旋轉、仿射變換


1.縮放

代碼:

# 使用resize函數實現圖片縮放
import cv2 src = cv2.imread("C:/360Downloads/1.jpg", 1) cv2.imshow("src", src) srcInfo = src.shape height = srcInfo[0] width = srcInfo[1] dstHeight = int(height * 0.5) dstWidth = int(width * 0.5) dst = cv2.resize(src, (dstWidth, dstHeight)) cv2.imshow("dst", dst) cv2.waitKey(0) 
# 使用warpAffine函數實現圖片縮放 import cv2 import numpy as np src = cv2.imread("C:/360Downloads/1.jpg", 1) cv2.imshow("src", src) srcInfo = src.shape height = int(srcInfo[0]/2) width = int(srcInfo[1]/2) # 將圖片縮小為原來的一半: # xNew = x * 0.5 # yNew = y * 0.5 # xNew = x * A1 + y * A2 + B1 # yNew = x * A3 + y * A4 + B2 # np.float32([[A1, A3, B1], # [A2, A4, B2]]) matScale = np.float32([[0.5, 0, 0], [0, 0.5, 0]]) dst = cv2.warpAffine(src, matScale, (width, height)) cv2.imshow("dst", dst) cv2.waitKey(0)

效果:

 

 

2.剪切

代碼:

# 圖片剪切
import cv2 src = cv2.imread("C:/360Downloads/1.jpg", 1) cv2.imshow("src", src) 
# [行,列] dst
= src[100:200, 100:300] cv2.imshow("dst", dst) cv2.waitKey(0)

效果:

 

 

3.位移

代碼:

# 圖像位移
import cv2 import numpy as np src = cv2.imread("C:/360Downloads/1.jpg", 1) cv2.imshow("src", src) srcInfo = src.shape height = srcInfo[0] width = srcInfo[1] # 左移100,下移200: # xNew = x + 100 # yNew = y + 200

# xNew = x * A1 + y * A2 + B1 # yNew = x * A3 + y * A4 + B2

# np.float32([[A1, A3, B1], # [A2, A4, B2]])
matShift = np.float32([[1, 0, 100], [0, 1, 200]]) dst = cv2.warpAffine(src, matShift, (width, height)) cv2.imshow("dst", dst) cv2.waitKey(0)

效果:

 

 

4.旋轉

代碼:

# 旋轉圖像
import cv2 src = cv2.imread("C:/360Downloads/1.jpg", 1) cv2.imshow("src", src) srcInfo = src.shape height = srcInfo[0] width = srcInfo[1] # getRotationMatrix2D 函數可獲取旋轉的仿射矩陣 # 參數依次為(旋轉中心,旋轉角度,縮放比例)
matRotate = cv2.getRotationMatrix2D((0, 0), 45, 0.5) dst = cv2.warpAffine(src, matRotate, (width, height)) cv2.imshow("dst", dst) cv2.waitKey(0)

效果:

 

 

5.仿射變換

代碼:

# 仿射變換
import cv2 import numpy as np src = cv2.imread("C:/360Downloads/1.jpg", 1) cv2.imshow("src", src) srcInfo = src.shape height = srcInfo[0] width = srcInfo[1] # 三點確定一個平面 # getAffineTransform 函數可獲取仿射矩陣 # 參數依次為(源圖像的三點坐標,目標圖像的三點坐標) # 三點分別為(左上角,左下角,右上角)
matSrc = np.float32([[0, 0], [0, height - 1], [width - 1, 0]]) matDst = np.float32([[50, 50], [150, height - 100], [width - 100, 150]]) matAffine = cv2.getAffineTransform(matSrc, matDst) dst = cv2.warpAffine(src, matAffine, (width, height)) cv2.imshow("dst", dst) cv2.waitKey(0)

效果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM