【问题标题】:How to convert coordinates of resized image to coordinate of original Image?如何将调整后图像的坐标转换为原始图像的坐标?
【发布时间】:2021-01-28 16:10:29
【问题描述】:

我正在使用 opencv 在 python 中创建图像裁剪器。我正在选择 4 个截面点的坐标以通过鼠标单击进行裁剪。问题是我正在调整图像的大小以在 (800x600) 等屏幕上显示它,我无法使用这些点来裁剪原始图像。

如何将这些坐标转换为,以便我可以裁剪大分辨率图像但显示它们已调整大小??

例如-如果图像是 1920x1080,它将占用整个屏幕,因此我将其调整为 1067x600,然后取点进行裁剪,但裁剪后的图像将是调整大小的图像,而不是原始的高分辨率图像。 如何将 (234,455) 等坐标转换为未调整大小的图像坐标?

【问题讨论】:

  • 您可能想展示一些有关您如何显示的代码,并告诉我们您当前的屏幕分辨率是多少
  • 不应该只是简单的平移和缩放点吗?

标签: python python-3.x image opencv image-processing


【解决方案1】:

你可以用百分比来处理这个问题。 基本上,保持图像的纵横比,将其调整为更小的尺寸。

def resize_to_max_dimension(image,max_dimension):
    image_height,image_width,channels = image.shape


    if image_height < max_dimension and image_width < max_dimension: ##Only resize larger images
        return image


    if image_height > image_width:
        final_height = max_dimension
        final_width = int(final_height *  image_width / image_height )
    else:
        if not image_width == 0:
            final_width = max_dimension
            final_height = int(final_width *  image_height / image_width)
        else:
            final_height = 0
            final_width = 0


    return cv2.resize(image,(int(final_width),int(final_height)))

现在,一旦调整大小,假设为 800 x 600,当您裁剪时,从顶部计算百分比。 基本上,x_min_percentage、y_min_percentage、x_max_percentage、y_max_percentage 因此,如果左侧的 x 最小值为 200,宽度为 800,则 x_min_percentage 为 25%。

现在很简单,取原始图像尺寸,乘以百分比,就得到了新的裁剪坐标。

image_height,image_width,channels = original_image.shape
crop_x_min = image_width * x_min_percentage
crop_y_min = image_height * y_min_percentage
crop_x_max = image_width * x_max_percentage
crop_y_max = image_height * y_max_percentage

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    相关资源
    最近更新 更多