插件窝 干货文章 图像裁剪后,如何精确转换坐标?

图像裁剪后,如何精确转换坐标?

裁剪 坐标 图像 原始 354    来源:    2025-03-15

在图像裁剪后,精确转换坐标的关键在于理解裁剪前后的坐标关系。以下是详细的步骤和解释:

1. 确定裁剪区域

假设原始图像的宽度为 W,高度为 H。裁剪区域的左上角坐标为 (x1, y1),右下角坐标为 (x2, y2)。裁剪后的图像宽度为 W' = x2 - x1,高度为 H' = y2 - y1

2. 坐标转换公式

要将原始图像中的坐标 (x, y) 转换到裁剪后的图像中的坐标 (x', y'),可以使用以下公式:

  • x' = x - x1
  • y' = y - y1

3. 反向转换

如果需要将裁剪后的图像中的坐标 (x', y') 转换回原始图像中的坐标 (x, y),可以使用以下公式:

  • x = x' + x1
  • y = y' + y1

4. 示例

假设原始图像大小为 800x600,裁剪区域的左上角坐标为 (100, 150),右下角坐标为 (500, 450)。裁剪后的图像大小为 400x300

  • 将原始图像中的点 (200, 250) 转换到裁剪后的图像中:

    • x' = 200 - 100 = 100
    • y' = 250 - 150 = 100
    • 转换后的坐标为 (100, 100)
  • 将裁剪后的图像中的点 (150, 200) 转换回原始图像中:

    • x = 150 + 100 = 250
    • y = 200 + 150 = 350
    • 转换后的坐标为 (250, 350)

5. 注意事项

  • 确保裁剪区域的坐标 (x1, y1)(x2, y2) 在原始图像的范围内。
  • 如果裁剪区域超出了原始图像的边界,需要进行边界检查和处理。

6. 代码示例(Python)

def crop_coordinates(x, y, x1, y1):
    """将原始图像中的坐标转换到裁剪后的图像中"""
    x_prime = x - x1
    y_prime = y - y1
    return x_prime, y_prime

def reverse_crop_coordinates(x_prime, y_prime, x1, y1):
    """将裁剪后的图像中的坐标转换回原始图像中"""
    x = x_prime + x1
    y = y_prime + y1
    return x, y

# 示例
x1, y1 = 100, 150
x2, y2 = 500, 450

# 原始图像中的点
x, y = 200, 250
x_prime, y_prime = crop_coordinates(x, y, x1, y1)
print(f"裁剪后的坐标: ({x_prime}, {y_prime})")

# 裁剪后的图像中的点
x_prime, y_prime = 150, 200
x, y = reverse_crop_coordinates(x_prime, y_prime, x1, y1)
print(f"原始图像中的坐标: ({x}, {y})")

7. 总结

通过上述步骤和公式,可以精确地在原始图像和裁剪后的图像之间转换坐标。关键在于理解裁剪区域的起始点和大小,并应用相应的坐标转换公式。