图像变换方式区别对比(Opencv)

发布于:2025-04-15 ⋅ 阅读:(28) ⋅ 点赞:(0)

1. 变换示例

import cv2
import matplotlib.pyplot as plot

img = cv2.imread(url)
img_cut = img[100:200, 200:300]
img_rsize = cv2.resize(img, (50, 50))
(hight,width) = img.shape[:2]
rotate_matrix = cv2.getRotationMatrix2D((hight//2, width//2), 50, 1)
img_wa = cv2.warpAffine(img, rotate_matrix, (width, hight))
img_fp = cv2.flip(img, -1)

plot.figure(figsize=(15,3));
plot.subplot(1,5,1)
plot.title('source image')
plot.imshow(img)
plot.subplot(1,5,2)
plot.title('cut')
plot.imshow(img_cut)
plot.subplot(1,5,3)
plot.title('resize')
plot.imshow(img_rsize)
plot.subplot(1,5,4)
plot.title('rotate affine')
plot.imshow(img_wa)
plot.subplot(1,5,5)
plot.title('flip')
plot.imshow(img_fp)

plot.show()

在这里插入图片描述

2. 改变尺寸

resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None)

  1. 返回:变形后图像
  2. src:原始图像
  3. dsize:目标尺寸(宽,高)
  4. fx:宽度方向缩放比例
  5. fy:高度方向缩放比例
  6. interpolation:插值方式,默认为线性插值

3. 旋转变形

getRotationMatrix2D(center, angle, scale)

  1. 返回:变换矩阵
  2. center:旋转中心坐标,是一个元组参数(col, row)
  3. angle:旋转角度,旋转方向,负号为逆时针,正号为顺时针
  4. scale:旋转后图像相比原来的缩放比例,1为等比例缩放

cv2.warpAffine(img,M,(rows,cols),flags=cv2.INTER_,borderMode=cv2.BORDER_REFLECT,borderValue=(255,255,255))

  1. 返回:变换后的图像
  2. src: 原始图像。
  3. M: 仿射变换矩阵,平移或旋转的2×3的变换矩阵
  4. dsize: 输出图像的大小。
  5. flags: 插值方式,默认线性插值
  6. borderMode: 边界像素模式,Constant: 使用常数值(borderValue)填充超出边界的区域,Replicate: 复制边界像素,Reflect: 使用反射模式填充
  7. borderValue: 边界填充值; 默认0

日常进行仿射变换时,在只设置前三个参数的情况下,如 cv2.warpAffine(img,M,(rows,cols))可以实现基本的仿射变换效果,但可以出现“黑边”现象

4. 图像翻转

flip(src, code)

  1. 返回:翻转后图像
  2. src:原始图像
  3. code:翻转方向,0:上下翻转, 1:左右翻转,-1:上下左右同时翻转

5. 图像插值类型

参数 算法 数值
INTER_NEAREST 最邻近插值 0
INTER_LINEAR 双线性插值 (默认) 1
INTER_CUBIC 4x4像素邻域内的双立方插值 2
INTER_AREA 使用像素区域关系进行重采样 3
INTER_LANCZOS4 8x8像素邻域内的Lanczos插值 4

系列文章:

  1. opencv常用边缘检测算子示例
  2. 图像颜色空间对比(Opencv)
  3. 图像变换方式区别对比(Opencv)
  4. 常用图像滤波及色彩调节操作(Opencv)
  5. 图像形态学操作对比(Opencv)