OpenCV3-Python(2)算术操作

图像加法

要求图像大小相同

  • cv加法饱和操作
    • img3=cv.add(img2,img1)
    • 超出255就取255
  • numpy模运算
    • img3=img2+img1
    • 超出255就取模运算 254+3=1

图像混合

本质也是加法,不过是不同的权重
cv.addWeighted( pic1, a, pic2, b, c)
pic3=pic1*a+pic2*b+c
一般情况下权重和为1
例:img2 = cv.addWeighted(img1, 0.7, img2, 0.3, 0)

图像缩放

cv.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINER)

  • src:输入图像
  • dsize:绝对尺寸,直接指定调整后图像的大小,为多余黑色区域整体大小
  • fx,fy:相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可
    • 宽×高 即为cols*rows
  • interpolation:插值方法
    • cv2.INTER_LINEAR 双线性插值法
    • cv2.INTER_NEAREST 最近邻插值
    • cv2.INTER_AREA 像素区域重采样(默认)
    • cv2.INTER_CUBIC 双三次插值

[0:2]是切片的意思 相当于对获取的列表[0:2]切片赋值
img.shape返回一个列表,分别为[长,宽,通道]
img.shape[:2] 取彩色图片的长、宽。
如果img.shape[:3] 则取彩色图片的长、宽、通道。
关于img.shape[0]、[1]、[2]
img.shape[0]:图像的垂直尺寸(高度或长度)
img.shape[1]:图像的水平尺寸(宽度)
img.shape[2]:图像的通道数
在矩阵中,[0]就表示行数,[1]则表示列数。

import cv2
import matplotlib.pyplot as plt
import cv2 as cv
img=cv.imread("/Users/liruiyan/Downloads/IMG_9502.JPG")

rows,cols=img.shape[:2]
res=cv.resize(img, (rows*2, cols*2), interpolation=cv2.INTER_LINEAR)
cv.imshow("content", res)
cv.waitKey(0)

res=cv.resize(img, None,fx=0.5,fy=0.5 interpolation=cv2.INTER_LINEAR)
cv.imshow("content", res)
cv.waitKey(0)

图像平移

cv.warpAffine(img,M,dsize)
M为变换矩阵
image.png
创建平移矩阵M=np.float32( [ [ 1, 0, 100] , [ 0, 1, 50] ] )
dsize为最后大小(cols,rows)

图像旋转

生成旋转矩阵M = cv.getRotationMatrix2D(center,angle,scale)

  • center为旋转中心点
  • angle为旋转角度
  • scale为缩放比例 0.5就是旋转后缩小一半

用图像变换带入旋转矩阵
cv.warpAffine(img,M,dsize)

仿射变换

给定3个点,原图的三个点映射到新图的三个点上,整个图对应变换
pts1=np.float32( [ 50, 50],[200, 50], [50, 200] ) 原图中三个点
pts2=np.float32( [ 100, 100],[200, 50], [100, 250] ) 目标图像三个点位置
M=cv.getAffineTransform(pts1,pts2) 得到变换矩阵
res=cv.warpAffine(img,M,(cols, rows))

透射变换

image.png
pst1=np.float32( [ 50, 50],[200, 50], [50, 200], [130, 50] ) 给定四个点
pst1=np.float32( [ 150, 50],[300, 50], [150, 200], [140, 50] )
M = cv.getPerspectiveTransform( pst1, pst2)
dst=cv.warpPerspective(img, M, (cols, rows))

图像金字塔

图像金字塔是图像多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。
用于机器视觉和图像压缩,一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。
金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似,层级越高,图像越小,分辨率越低。
image.png
cv.pyrUp(img)
cv.pyrDown(img)

img1 = cv.pyrUp(img) # 上采样操作
img2 = cv.pyrDown(img) # 下采样操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值