opencv學(xué)習(xí)筆記---No2圖片的幾何變換

圖片的幾何變換

圖片的簡(jiǎn)單變換不外乎有這么幾種 :縮放,平移,鏡像,剪切,旋轉(zhuǎn)等。
昨天小編有提到圖像都是由一個(gè)個(gè)像素點(diǎn)組成的,對(duì)圖片進(jìn)行操作等同于對(duì)每個(gè)像素點(diǎn)組成的矩陣進(jìn)行操作。

縮放

opencv中的resize函數(shù)可以完成此功能
常見的縮放的方法有:最近鄰域插值、雙線性插值、像素關(guān)系重采樣、立方插值
雙線性插值計(jì)時(shí)通過橫縱坐標(biāo)確立新的像素點(diǎn)的位置。其實(shí)我們只要獲得圖片的寬和高就可以進(jìn)行縮放處理,以縮小為例,原來(lái)的圖像中的某一點(diǎn)坐標(biāo)為(100,200),縮小至二分之一后就是(50,100)【注:我們默認(rèn)等比例縮小】具體的代碼實(shí)現(xiàn)如下:

import cv2
import numpy as np
image = cv2.imread("test.jpg")
imgInfo = image.shape
height = imgInfo[0]
width = imgInfo[1]
mode = imgInfo[2]
##圖pain的縮放
reheight = int(height*0.5)
rewidth = int(width*0.5)
newimg = cv2.resize(image,(reheight,rewidth))  
#1:原始圖片 2:縮放矩陣 
cv2.imshow("image",newimg)

效果圖如下:
縮放.PNG

平移

平移就是對(duì)像素點(diǎn)做坐標(biāo)軸上的平移,比如說(shuō)原來(lái)某一像素點(diǎn)為(20,150),我們可以對(duì)其進(jìn)行任意方向的移動(dòng),具體實(shí)現(xiàn)到就是將像素矩陣做加減運(yùn)算,可以用warpAffine函數(shù) 具體的代碼實(shí)現(xiàn)如下:

matShift = np.float32([[1,0,100],[0,1,100]])# 2*3
dst = cv2.warpAffine(image,matShift,(height,width))
cv2.imshow("dst",dst)

剪切

剪切就是在整個(gè)大的矩陣中拿出一部分(必須是連續(xù)的喲)

'''
newing_2 = image[100:200,200:300]
cv2.imshow("image1",newing_2)
'''
剪切.PNG

鏡像

鏡像就是做鏡面處理。


#圖pain的景象
newImgInfo = (height*2,width,mode)
dst = np.zeros(newImgInfo,np.uint8)#uint8 
for i in range(0,height):
    for j in range(0,width):
        dst[i,j] = image[i,j]
        #x y = 2*h - y -1
        dst[height*2-i-1,j] = image[i,j]
for i in range(0,width):
    dst[height,i] = (0,0,255)#BGR
cv2.imshow('dst',dst)
cv2.waitKey(0)

效果圖如下:
鏡像.PNG

明天將繼續(xù)和大家分享。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容