Python-OpenCv之图像基本处理-平移,缩放,旋转,翻转,裁剪及仿射变换
基本图像处理
1. 缩放scale
缩放通过size()实现
函数说明:
参数说明:
src - 原图
dst - ⽬标图像。当参数dsize不为0时,dst的⼤⼩为size;否则,它的⼤⼩需要根据src的⼤⼩,参数fx和fy决定。dst的类型(type)和src图像相同
dsize - ⽬标图像⼤⼩。当dsize为0时,它可以通过以下公式计算得出:
所以,参数dsize和参数(fx, fy)不能够同时为0
fx - ⽔平轴上的⽐例因⼦。当它为0时,计算公式如下:
fy - 垂直轴上的⽐例因⼦。当它为0时,计算公式如下:
interpolation - 插值⽅法。共有5种:
INTER_NEAREST - 最近邻插值法
INTER_LINEAR - 双线性插值法(默认)
INTER_AREA - 基于局部像素的重采样(resampling using pixel area relation)。对于图像抽取也叫缩⼩图像(image
decimation)来说,这可能是⼀个更好的⽅法。但如果是放⼤图像时,它和最近邻法的效果类似。
INTER_CUBIC - 基于4x4像素邻域的3次插值法
INTER_LANCZOS4 - 基于8x8像素邻域的Lanczos插值
缩⼩图像 ⽤INTER_AREA更好,放⼤图像⽤ INTER_CUBIC更好;
代码⽰范:
import cv2
wang的成语
# 读取⼀张照⽚
img = cv2.imread('tiger_tibet_village.jpg')
# 缩放成200x200的图像
img_200x200 = size(img, (200, 200))
# 不直接指定缩放后⼤⼩,通过fx和fy指定缩放⽐例,0.5则长宽都为原来⼀半
# 等效于img_200x300 = size(img, (300, 200)),注意指定⼤⼩的格式是(宽度,⾼度)
# 插值⽅法默认是cv2.INTER_LINEAR,这⾥指定为最近邻插值
img_200x300 = size(img, (0, 0), fx=0.5, fy=0.5,
interpolation=cv2.INTER_NEAREST)
cv2.imwrite('resized_200x200.jpg', img_200x200)
cv2.imwrite('resized_200x300.jpg', img_200x300)
2. 旋转rotate
重庆的特点opencv中对图像的旋转主要是先通过getRotationMatrix2D函数得到图像的旋转矩阵,然后再通过仿射变换函数warpAffine得到旋转后的图像。
失眠搞笑图片函数说明:
cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst
参数说明:
getRotationMatrix2D:
center–表⽰旋转的中⼼点
合同知识angle–表⽰旋转的⾓度degrees
scale–图像缩放因⼦
warpAffine:
src – 输⼊的图像
M – 2 X 3 的变换矩阵.
dsize – 输出的图像的size⼤⼩
dst – 输出的图像
flags – 输出图像的插值⽅法
borderMode – 图像边界的处理⽅式
borderValue – 当图像边界处理⽅式为BORDER_CONSTANT 时的填充值
代码⽰范:
img = cv2.imread('messi5.jpg',0)
rows,cols = img.shape
#90度旋转
M = RotationMatrix2D((cols/2,rows/2),90,1)
激素药有哪几种
dst = cv2.warpAffine(img,M,(cols,rows))
图⽰:
3. 裁剪crop
裁剪是利⽤array⾃⾝的下标截取实现
代码⽰范:
img = cv2.imread('rotation.jpg')
print img.shape
#裁剪
crop_img = img[20:100, 20:160]
cv2.imwrite('crop_img.jpg', crop_img)
图⽰:
播撒阳光
原图:
裁剪后图像:
4. 填充pad
填充通过函数copyMakeBorder实现:
函数说明:
src – 输⼊的图像
dst – 输出的图像
top,bottom,left,right – 分别表⽰在原图四周扩充边缘的像素值
borderType –图像边界的处理⽅式
常见的borderType:
BORDER_REPLICATE :复制法,复制最边缘像素
BORDER_REFLECT_101:对称法,以最边缘像素为轴,对称
BORDER_CONSTANT:常量法,以⼀个常量参数值(⾃定参数value给定)填充扩充的边界value – 当图像边界处理⽅式为BORDER_CONSTANT 时的填充值
代码⽰范:
# 在上张图⽚的基础上,上下各填充50像素,填充值为128,⽣成新的的图像
pad_img = pyMakeBorder(crop_img, 50, 50, 0, 0, cv2.BORDER_CONSTANT, value=(128, 128, 128)) cv2.imwrite('pad_img.jpg', pad_img)
图⽰:
原图:
填充后图像:
5. 平移translate
平移通过⾃定义平移矩阵以及函数warpAffine实现:
代码⽰范:
img = cv2.imread('messi5.jpg',0)
rows,cols = img.shape
# 平移矩阵M:[[1,0,x],[0,1,y]]
M = np.float32([[1,0,100],[0,1,50]])
dst = cv2.warpAffine(img,M,(cols,rows))
图⽰:
6. 翻转flip
翻转通过函数flip实现:
函数说明:
cv2.flip(src, flipCode[, dst]) → dst
参数说明:
src – 输⼊的图像
dst – 输出的图像
flipCode – 翻转模式,flipCode==0垂直翻转(沿X轴翻转),flipCode>0⽔平翻转(沿Y轴翻转),flipCode<0⽔平垂直翻转(先沿X轴翻转,再沿Y轴翻转,等价于旋转180°)
扇贝怎么处理干净
代码⽰范:
# ⽔平翻转
哈尔滨的景点flip_horiz_img = cv2.flip(pad_img, 1)
# 垂直翻转
flip_verti_img = cv2.flip(pad_img, 0)
# ⽔平垂直翻转
flip_horandver_img = cv2.flip(pad_img, -1)
图⽰:
图像的仿射变换Affine transformation