图像的基本变换
import cv2
import numpy as np
dog = cv2.imread('./dog.jpg')
cat = cv2.imread('./cat.jpg')
# print(dog.shape)
# print(cat.shape)
##############把猫缩放成和狗一样大##################
####cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])
# new_dog1=cv2.resize(dog,(640,480),interpolation=cv2.INTER_NEAREST)
# new_dog2=cv2.resize(dog,(640,480),interpolation=cv2.INTER_LINEAR)#默认效果
# new_dog3=cv2.resize(dog,(640,480),interpolation=cv2.INTER_CUBIC)
# new_dog4=cv2.resize(dog,(640,480),interpolation=cv2.INTER_AREA)
########还可以按照x,y轴的比例进序缩放###########
####cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])
new_dog=cv2.resize(dog,dsize=None,fx=0.25,fy=1.5)
print(new_dog.shape)
cv2.imshow('new_dog',new_dog)
# cv2.imshow('new_dog1',new_dog1)
# cv2.imshow('new_dog2',new_dog2)
# cv2.imshow('new_dog3',new_dog3)
# cv2.imshow('new_dog4',new_dog4)
# img_xor=cv2.bitwise_xor(new_dog1,new_dog3)
# cv2.imshow('xor',img_xor)
cv2.imshow('dog',dog)
# cv2.imshow('new_dog',new_dog)
cv2.waitKey(0)
cv2.destroyAllWindows()
仿射变换
import cv2
import numpy as np
dog=cv2.imread('./dog.jpg')
h,w,ch=dog.shape
#变换矩阵,最少是float32位
M=np.float32([[1,0,200],[0,1,200]])
###########平移操作#############
#注意opencv中是先宽度,后高度
new_dog=cv2.warpAffine(dog,M,dsize=(w,h))
cv2.imshow('dog',dog)
cv2.imshow('new_dog',new_dog)
cv2.waitKey(0)
cv2.destroyAllWindows()
获取变换矩阵
在进行旋转操作的时候,不方便手动计算变换矩阵,opencv提供了获取变换矩阵的API
import cv2
import numpy as np
dog=cv2.imread('./dog.jpg')
h,w,ch=dog.shape
####################获取变换矩阵######################
#cv2.getRotationMatrix2D(center, angle, scale)
#M=cv2.getRotationMatrix2D((100,100),15,1)
M=cv2.getRotationMatrix2D((w/2,h/2),15,1)
new_dog=cv2.warpAffine(dog,M,(w,h))
cv2.imshow('dog',dog)
cv2.imshow('new_dog',new_dog)
cv2.waitKey(0)
cv2.destroyAllWindows()
通过三个点来确定变换矩阵
import cv2
import numpy as np
dog=cv2.imread('./dog.jpg')
h,w,ch=dog.shape
src=np.float32([[200,100],[300,100],[200,300]])
dst=np.float32([[150,120],[360,150],[280,220]])
#需要原始图片的三个点坐标,和变换之后的三个对应的坐标
#cv2.getAffineTransform(src, dst)
M=cv2.getAffineTransform(src,dst)
new_dog=cv2.warpAffine(dog,M,(w,h))
cv2.imshow('dog',dog)
cv2.imshow('new_dog',new_dog)
cv2.waitKey(0)
cv2.destroyAllWindows()
透视变换
import cv2
import numpy as np
img=cv2.imread('./123.jpg')
print(img.shape)
#获取变换矩阵
#cv2.getPerspectiveTransform(src, dst[, solveMethod])
#src是原图的四个坐标
src=np.float32([[141,445],[423,460],[10,925],[510,925]])
dst=np.float32([[0,0],[500,0],[0,750],[500,750]])
M=cv2.getPerspectiveTransform(src,dst)
#透视变换
new_img=cv2.warpPerspective(img,M,(500,750))
cv2.getPerspectiveTransform(src,dst)
cv2.imshow('img',img)
cv2.imshow('new_img',new_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像的翻转
import cv2
import numpy as np
dog=cv2.imread('./dog.jpg')
#cv2.flip(src, flipCode[, dst])
#flipCode=0,表示上下翻转
#flipCode>0,表示左右翻转
#flipCode<0,表示上下左右翻转
new_dog=cv2.flip(dog,-1)
cv2.imshow('dog',np.vstack((dog,new_dog)))
cv2.waitKey(0)
cv2.destroyAllWindows()
图像的旋转
import cv2
import numpy as np
dog=cv2.imread('./dog.jpg')
#ROTATE_90_CLOCKWISE 90度顺时针
#ROTATE_180 180度
#ROTATE_90_COUNTERCLOCKWISE 90度逆时针
#cv2.rotate(src, rotateCode[, dst])
new_dog=cv2.rotate(dog,rotateCode=cv2.ROTATE_90_CLOCKWISE)
cv2.imshow('dog',dog)
cv2.imshow('new_dog',new_dog)
cv2.waitKey(0)
cv2.destroyAllWindows()