圖片的幾何變換
圖片的簡(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ù)和大家分享。