OpenCV 图像变换

图像的基本变换

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()

  • 24
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值