算术操作
1.图像加法
2.图像混合
3.图像缩放
4图像平移
5.图像旋转
1.图像加法:cv.add()函数将两幅相同大小和类型图像相加,是饱和操作,Numpy添加是模运算
>>>x=np.uint8([250])
>>>y=np.uint8([10)
>>>print(cv.add(x,y)) #250+10=260-->255
[[255]]
>>>print(x+y) #250+10=260 % 256-->4
[4]
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
cloud=cv.imread('cloud.jpg')
sky=cv.imread('sky.jpg')
img1=cv.add(cloud,sky)
img2=(cloud+sky)
plt.imshow(img1[:,:,::-1])
plt.imshow(img2[:,:,::-1])
plt.show()
2.图像的混合:是一种权重不同的加法,计算公式 g(x)=(1-a)f0(x)+af1(x),利用函数cv.addWeighted()实现图像混合
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
#获取图像
cloud=cv.imread('cloud.jpg')
sky=cv.imread('sky.jpg')
#图像混合
img=cv.addWeighted(cloud,0.7,sky,0.3,0)
#图像显示
plt.figure(figsize=(8,8))
plt.imshow(img[:,:,::-1])
plt.show()
3.图像的缩放:
cv.resize(src,dsize,fx=0,fy=0,interpolation=cv.INTER_LINEAR)
参数:
1>src:输入图像
2>dsize:绝对尺寸,指定调整后的图像大小
3>fx,fy:相对尺寸,将dsize设置为None,fx、fy设置成比例因子
4>interpolation:插值方法
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
cloud=cv.imread('cloud.jpg')
#plt.imshow(cloud[:,:,::-1])
plt.show()
#绝对尺寸
'''
rows,cols=cloud.shape[:2]
res=cv.resize(cloud,(2*cols,2*rows))
plt.imshow(res[:,:,::-1])
plt.show()
'''
#相对尺寸
res1=cv.resize(cloud,None,fx=0.5,fy=0.5)
plt.imshow(res1[:,:,::-1])
plt.show()
4.图像平移:
cv.warpAffine(img,M,dsize)
M:2*3矩阵,设置为np.float32类型Numpy数组,对于(x,y)移动到(x=m,y+n)处,矩阵为
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
cloud=cv.imread('cloud.jpg')
#plt.imshow(cloud[:,:,::-1])
#plt.show()
rows,cols=cloud.shape[:2]
M=np.float32([[1,0,100],[0,1,50]])
res=cv.warpAffine(cloud,M,(cols,rows))
plt.imshow(res[:,:,::-1])
plt.show()
5.图像旋转:
cv.getRotationMatrix2D(center,angle,scale)
参数:
1>center:旋转中心
2>angle:旋转角度
3>scale:缩放比例
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
cloud=cv.imread('cloud.jpg')
rows,cols=cloud.shape[:2]
#生成旋转矩阵
M=cv.getRotationMatrix2D((cols/2,rows/2),90,1)
#进行旋转变换
res=cv.warpAffine(cloud,M,(cols,rows))
#图像显示
plt.imshow(res[:,:,::-1])
plt.show()