1.图像的混合
dst=cv.addWeighted(src1, alpha, src2, beta,gamma, dst, dtype)
src1:插入的第一个图片
src2`插入的第二个图片;
alpha:double类型,加权系数,是src1图片的融合占比 ;
beta:double类型,加权系数,是src2图片的融合占比;
gamma:double类型,加权后图像的偏移量;
dst:输出图像;
dtype:默认为-1。
实操代码:
import cv2 as cv
import matplotlib.pyplot as pl
cat=cv.imread(r'img\jmh\cat.jpg')
dog=cv.imread(r'img\jmh\dog.jpeg')
w=800
h=500
W=(w,h)
add=cv.resize(cat,W)
ad=cv.addWeighted(dog,0.6,add,0.4,0.5)
pl.imshow(ad[:,:,::-1])
pl.show()
2.图像的缩放
cv.resize(src,dsize,fx=0,fy=0,interpolation=)
src 输入图像,dsize 绝对尺寸,直接调整图像的大小
fx,fy 相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可
interpolation 插值方法
插值:cv2.INTER_LINEAR双线性插值法
cv2.INTER_NEAREST最近邻插值
cv2.INTER_AREA像素区域重采样(默认)
cv2.INTER_CUBIC双三次插值
import cv2 as cv
import matplotlib.pyplot as pl
lion=cv.imread("img\jmh\lion.jpeg")
w,s=lion.shape[:2]
print('原图像的尺寸',w,s)
T=(int(0.5*w),int(0.5*s))#缩小要注意乘数的数据类型
#img=cv.resize(lion,(2*w,2*s))#绝对尺寸放大
#img=cv.resize(lion,T)#缩小图像
#相对尺寸
img=cv.resize(lion,dsize=None,fx=2,fy=2)#其中2为放大图像2倍,1为原图,0.5表示缩小一半
#pl.imshow(lion[:,:,::-1])
pl.imshow(img[:,:,::-1])
pl.show()
>>>原图像的尺寸 500 800
3.图像的移动
移动:普通移动,旋转移动,仿射移动
cv.warpAffine(img,M,dsize)
img 输入的图像
M 要移动的矩阵
dsize 输出图像大小(垂直像素,水平像素)建议使用原来尺寸上进行操作
M=np.float32([[1,0,100],[0,1,50]])
生成2X3的矩阵
像素在x轴移动100px,在y轴移动50px
实操代码如下:
import cv2 as cv
import numpy as np
import matplotlib.pyplot as pl
img=cv.imread(r'img\jmh\cat.jpg')
#设置移动的像素点
M=np.float32([[1,0,100],[0,1,50]])#在X轴移动100个像素点,在Y轴移动50个像素点
#获取原来的尺寸,可以自定义
w,h=img.shape[:2]
#移动图像
cat=cv.warpAffine(img,M,(h,w))
#(900,1200)
pl.imshow(cat[:,:,::-1])
pl.show()
4.图像的旋转
旋转矩阵的获取
getRotationMatrix2D(center,angle,scalt)
center 旋转中心
angle旋转角度
scalt 缩放比例
旋转图像分为两步:
1.旋转矩阵(M)的获取
2.使用cv.warpAffine(图像,M,(尺寸) )移动图像位置
具体代码如下:
import cv2 as cv
import matplotlib.pyplot as pl
img=cv.imread(r'img\jmh\rabbit.jpeg')
h,w=img.shape[:2]
M=cv.getRotationMatrix2D((w/2,h/2),-45,1)
rabbit=cv.warpAffine(img,M,(w,h))
pl.imshow(rabbit[:,:,::-1])
pl.show()
5.图像的仿射变换
仿射矩阵的获取
cv.getAffineTransform(arr1,arr2)
arr1:仿射前的矩阵坐标
arr2:仿射后的矩阵坐标
步骤:
创建仿射矩阵
arr1=np.float32([[50,50],[200,50],[50,200]])
由50仿射到100
arr2=np.float32([[100,100],[200,50],[100,250]])
M=cv.getAffineTransform(arr1,arr2)
完成仿射变换
dst=cv.warpAffine(img,M(cols,rows)
显示图像
具体代码如下:
import cv2 as cv
import numpy as np
import matplotlib.pyplot as pl
img=cv.imread(r'img\jmh\fox.jpeg')
cols,rows=img.shape[:2]
arr1=np.float32([[0,0],[500,300],[0,300]])
arr2=np.float32([[100,50],[400,250],[100,200]])
M=cv.getAffineTransform(arr1,arr2)
dst=cv.warpAffine(img,M,(rows,cols))
pl.imshow(dst[:,:,::-1])
pl.show()