剪切图像而不裁剪

2023-11-30

我正在尝试使用 python 对图像进行剪切变换。我正在使用 skimage (scikit-image)、opencv 或类似的工具也可以完成我认为的工作。问题是,每当我尝试使用仿射变换和扭曲(skimage)进行剪切时,图像都会出现“裁剪”或“剪辑”(“剪切”图像的某些部分丢失),只要剪切变换移动像素(涉及像素的翻译)。我需要支持图像比例的“画布”,以便“剪切”图像适合新图像,但保留输入图像的所有信息(附加图像)

Top: a WxH image containing a frame. Bottom: sheared input image using a new image so every information of the original is kept


我遇到了同样的麻烦,我终于找到了一个与我测试的图像配合良好的解决方案。我使用的事实是我想对图像应用剪切、旋转和平移变换。

  1. 首先,我们计算旋转所需的空间(不需要 如果不使用则进行计算)。
  2. 其次,我们计算图像最后一个像素所需的空间,该像素将通过剪切在图像中产生最大平移。
  3. 第三,我们需要计算必要的平移,以补偿剪切将移动图像中心的事实。

如果您希望所有图像大小相同,请使用 45 度角,因为该角度需要更多空间。

import numpy as np
import cv2

#Parameters of the affine transform:
angle = 45; #Angle in degrees.
shear = 1;
translation = 5;

type_border = cv2.BORDER_CONSTANT;
color_border = (255,255,255);

original_image = cv2.imread(name_image_file);
rows,cols,ch = original_image.shape;

#First: Necessary space for the rotation
M = cv2.getRotationMatrix2D((cols/2,rows/2), angle, 1);
cos_part = np.abs(M[0, 0]); sin_part = np.abs(M[0, 1]);
new_cols = int((rows * sin_part) + (cols * cos_part)); 
new_rows = int((rows * cos_part) + (cols * sin_part));

#Second: Necessary space for the shear
new_cols += (shear*new_cols);
new_rows += (shear*new_rows);

#Calculate the space to add with border
up_down = int((new_rows-rows)/2); left_right = int((new_cols-cols)/2);

final_image = cv2.copyMakeBorder(original_image, up_down, up_down,left_right,left_right,type_border, value = color_border);
rows,cols,ch = final_image.shape;

#Application of the affine transform.
M_rot = cv2.getRotationMatrix2D((cols/2,rows/2),angle,1);
translat_center_x = -(shear*cols)/2;
translat_center_y = -(shear*rows)/2;

M = M_rot + np.float64([[0,shear,translation + translat_center_x], [shear,0,translation + translat_center_y]]);
final_image  = cv2.warpAffine(final_image , M, (cols,rows),borderMode = type_border, borderValue = color_border);

示例(我将“cv2.copyMakeBorder”和“cv2.getRotationMatrix2D”的边框设置为白色): 角度 = -45 度。剪切力 = -0.5

Original image

Shear = -0.5, rotation of -45 degrees

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

剪切图像而不裁剪 的相关文章

随机推荐