图像下采样与扭曲方法(一)
`
在模型训练中往往需要合成一些假数据来添加到数据中,来增强训练效果,但是合成的样本和真实样本有的时候相差太远,因此使用下采样和扭曲的方法来模拟真实场景的图片。
一、基础下采样 + 仿射变换
二、透视变换扭曲
前言
使用opencv + python的方法来进行实现
一、基础下采样 + 仿射变换
使用opencv中的resize方法来进行图片下采样,再使用放射变换来扭曲图像
代码如下(示例):
def basic_downsample_and_warp(image_path, scale_factor=0.5):
img = cv2.imread(image_path)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
height, width = img.shape[:2]
new_width = int(width * scale_factor)
new_height = int(height * scale_factor)
downsampled = cv2.resize(img, (new_width, new_height), interpolation=cv2.INTER_LINEAR)
rows, cols = downsampled.shape[:2]
# 源点
src_points = np.float32([[0, 0], [cols - 1, 0], [0, rows - 1]])
dst_points = np.float32([
[3, 3],
[cols - 6, -3],
[4, rows - 4]
])
# 计算仿射变换矩阵
M = cv2.getAffineTransform(src_points, dst_points)
# 应用仿射变换
warped = cv2.warpAffine(downsampled, M, (cols, rows))
return downsampled, warped
二、透视变换扭曲
使用opencv中的resize方法来进行图片下采样,再使用放射变换来扭曲图像
代码如下(示例):
def basic_downsample_and_warp(image_path, scale_factor=0.5):
img = cv2.imread(image_path)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
height, width = img.shape[:2]
new_width = int(width * scale_factor)
new_height = int(height * scale_factor)
downsampled = cv2.resize(img, (new_width, new_height), interpolation=cv2.INTER_LINEAR)
rows, cols = downsampled.shape[:2]
# 源点
src_points = np.float32([[0, 0], [cols - 1, 0], [0, rows - 1]])
dst_points = np.float32([
[5, 5],
[cols - 10, -5],
[8, rows - 8]
])
# 计算仿射变换矩阵
M = cv2.getAffineTransform(src_points, dst_points)
# 应用仿射变换
warped = cv2.warpAffine(downsampled, M, (cols, rows))
return downsampled, warped