图像的进阶操作

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值