日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数字图像处理之图像几何变换

發(fā)布時間:2023/12/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数字图像处理之图像几何变换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

圖像的幾何變換包括以下幾個方面:

導入庫

import numpy as np import matplotlib.pyplot as plt import cv2 as cv

顯示圖片函數

def show(img):if img.ndim == 2:plt.imshow(img,cmap='gray')else:plt.imshow(cv.cvtColor(img,cv.COLOR_RGB2BGR))plt.show()

圖片的剪裁、放大和縮小

#圖片剪裁 img = cv.imread('C:\PerfLogs\pc4.jpg') img_pg = img[1250:1750,300:1000,:] show(img_pg) #opencv中自帶的resize函數 img2 = cv.resize(img,(500,400)) show(img2)

原圖:

剪裁過后:

調整大小:

平移變換


平移矩陣:

#平移變換 M = np.array([[1,0,100],[0,1,50] ],dtype=np.float32)#平移矩陣 img2 = cv.warpAffine(img,M,(1333,2003))#原圖、偏移矩陣、變換后的圖片大小 show(img2)

錯切變換


其實錯切變換和平移變換的公式是一樣的,只不過矩陣的參數不同,可以根據平移變換來考慮錯切變換。

#水平錯切變換 M = np.array([[1,0.2,0],[0,1,0] ],dtype=np.float32) img3 = cv.warpAffine(img,M,(2333,2203)) show(img3) #垂直錯切變換 M = np.array([[1,0,0],[0.3,1,0] ],dtype=np.float32) img3 = cv.warpAffine(img,M,(2333,2203)) show(img3)

水平錯切:

垂直錯切:

鏡像變換


考慮對稱性

#水平鏡像變換 Mx = np.array([[-1,0,930],[0,1,0] ],dtype=np.float32) img4 = cv.warpAffine(img,Mx,(3333,2203)) show(img4) #垂直鏡像變換 Mx = np.array([[1,0,0],[0,-1,1200] ],dtype=np.float32) img4 = cv.warpAffine(img,Mx,(1333,2203)) show(img4)

上面的代碼是自己寫的變換矩陣,然后實現的鏡像變換。其實opencv中是有自帶的庫函數進行鏡像變換的。但是實際使用的時候,可能需要根據不同的對稱線進行鏡像變換,所以學會變換矩陣的做法也是很必要的。

#鏡像變換函數 img4 = cv.flip(img ,1)#水平鏡像變換 img5 = cv.flip(img ,0)#垂直鏡像變換 img6 = cv.flip(img ,-1)#中心鏡像變換 show(np.hstack([img4,img5,img6]))

旋轉變換


公式推導:

#旋轉變換 beta = np.pi / 4.0 M = np.array([[np.cos(beta),np.sin(beta),0],[-np.sin(beta),np.cos(beta),0] ],dtype=np.float32) img5 = cv.warpAffine(img,M,(4333,2203)) show(img5)

opencv自帶的庫函數進行旋轉變換-利用opencv自帶的庫函數求出變換矩陣

#opencv函數進行旋轉變換 h,w,c = img.shape M2 = cv.getRotationMatrix2D((w//2,h//2),45,1)#中心點、角度、放大還是縮小 img5 = cv.warpAffine(img,M2,(1333,1203))


opencv自帶的庫函數直接實現旋轉變換,但是只能是特殊角度的旋轉,例如90°,180°。

img6 = cv.rotate(img,cv.ROTATE_90_CLOCKWISE) show(img6)

透視變換

所謂的透視變換就是將圖片偏向正視角的部分朝向正視角。如下所示:

#透視變換 img = cv.imread('C:\PerfLogs\pp.jpg') src = 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)#透視變換之后的部分,在生成的圖片中的四角坐標,左上-右上-右下-左下 M = cv.getPerspectiveTransform(src,dst) img2 = cv.warpPerspective(img,M,(1500,1500)) show(img2) 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的数字图像处理之图像几何变换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。