【问题标题】:Shape of image does not change after rotation with imgaug使用 imgaug 旋转后图像的形状不会改变
【发布时间】:2020-11-02 13:05:18
【问题描述】:

我正在按以下方式旋转图片:

# Read in image
img = cv2.imread("pic.jpg")
height, width, _ = img.shape
print("height ", height)
print("width ", width)

# Rotate image by 90 degrees
augmentation = iaa.Affine(rotate=90)
img_aug = augmentation(image=img)

height, width, _ = img_aug.shape
print("Height after rotation ", height)
print("Width after rotation ", width

> height  1080
> width  1920
> Height after rotation  1080
> Width after rotation  1920

为什么图片的形状没有变化?

【问题讨论】:

  • 您旋转的是内容,而不是图像。

标签: python image-processing computer-vision data-augmentation


【解决方案1】:

图像增强不会改变图像的实际或物理shape。将原始的shape 想象成一个window,您可以从那里看到图像或外部世界。这里所有的转换,即rotationsstretchingstranslation 或通常任何homography 或非线性warps 都应用于您窗外的世界。无论外面的世界如何变化,即图像如何变化,您查看图像的开口(在我的比喻中是窗户)都保持不变。

现在它显然可以将原始视图中不存在的其他区域引入增强视图。大多数情况下,新引入的像素是黑色的,或者可能取决于应用了哪种padding

简而言之,增强操作不像矩阵transpose 那样实际形状可能会发生变化。

img = cv2.imread("img.png")
augmentation = iaa.Affine(rotate=90)
img_aug = augmentation(image=img)

让我们看看图片:

Original Image

Rotated Image

【讨论】:

  • 感谢@swag2198 的详细解释。我现在只使用 cv2.ROTATE_90_CLOCKWISE 来实际改变图像的形状。
  • 我很好奇,你为什么要改变图像的形状!
  • 我很欣赏你的话,但请看这里:stackoverflow.com/help/someone-answers.
  • 从旋转的堆栈溢出图像中可以看出,它切断了图像的一部分。通过 cv2.ROTATE_90_CLOCKWISE 改变形状,这不应该发生。我在对象检测模型中使用它来增强。如果我不改变形状,我的边界框会得到负值。
  • iaa.Rot90(keep_size=False) 会做我想做的事情:-) iaa.Affine(rotate) 不会改变形状是有道理的,因为图像不仅可以旋转 - 90,90 和 180,但程度不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
相关资源
最近更新 更多