我正在使用opencv在python中创建图像裁剪器。我正在从鼠标单击中选择要裁剪的4点截面的坐标。问题是我正在调整图像的大小以将其显示在屏幕上,例如(800x600),我无法使用这些点来裁剪原始图像。
我如何将这些坐标转换为可以裁剪大尺寸的图像,但显示它们的大小?
例如,如果图像为1920x1080,它将占据整个屏幕,因此我将其调整为1067x600,然后用点进行裁切,但是裁切后的图像将调整为一个尺寸,而不是原始的高分辨率。如何将(234,455)之类的坐标转换为未调整大小的图像坐标?
您可以用百分比来处理。基本上,保持图像的纵横比,将其调整为较小的尺寸。
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 min为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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句