【问题标题】:Cropping an image reduces image quality裁剪图像会降低图像质量
【发布时间】:2018-04-10 00:03:09
【问题描述】:

我想从图像中裁剪出感兴趣的区域。 图片:]

我使用一个函数来旋转和裁剪感兴趣的区域。但是,此功能的裁剪图像输出与手动裁剪(通过照片编辑器或绘画)图像存在差异。 旋转后的图像如下 手动裁剪后的图片(以旋转后的图片为输入)如下

我从函数中得到的图像如下

您可以看到差异。在函数输出的情况下,边缘不清晰且定义明确。我该如何解决这个问题?

函数如下

def crop_minAreaRect(img, rect):

    # rotate img
    angle = rect[2]
    rows,cols = img.shape[0], img.shape[1]
    M = cv2.getRotationMatrix2D((cols/2,rows/2),angle,1)
    img_rot = cv2.warpAffine(img,M,(cols,rows))
    cv2.imshow("img_rot", img_rot)

    # rotate bounding box
    rect0 = (rect[0], rect[1], 0.0)
    box = cv2.cv.BoxPoints(rect)
    pts = np.int0(cv2.transform(np.array([box]), M))[0]    
    pts[pts < 0] = 0

    # crop
    img_crop = img_rot[ pts[1][1]:pts[0][1], pts[1][0]:pts[2][0] ]

    cv2.imshow("cropped", img_crop)

提前致谢!

【问题讨论】:

  • 如果你按照相同的程序进行裁剪,为什么两张裁剪后的图像大小不同?
  • 画质是否真的降低了,还是因为您使用了不同大小的矩形而只是拉伸了图像?
  • @KadiSoheib 我没有使用相同的程序进行裁剪。我手动裁剪了一个条形码,而另一个条形码已从函数中裁剪。
  • @AlexanderReynolds 不同大小的矩形是什么意思?
  • @SurabhiVerma 所以最后,区别只是彩色边界框?一个只有你能理解的糟糕问题。

标签: opencv


【解决方案1】:

我希望能进一步说明您是如何“手动”裁剪图像的。但是由于您用与您的问题相同的字眼回复了我的评论,因此我将仅根据猜测在这里回答。

首先让我们看看你的函数是做什么的。 从签名def crop_minAreaRect(img, rect): 它接受一个图像和一个定义裁剪位置的矩形。它还定义了一个旋转。该函数使用该旋转并使用它来转换图像。 您的问题是为什么手动裁剪和使用此功能裁剪是不同的。但首先你是如何手动裁剪的?程序是什么?您是否遵循相同的步骤?你是如何“手动”旋转图像的? 我的猜测这里是你先从图像中裁剪出矩形,然后图像在使用此功能进行裁剪之前经历了许多变换。如果这是真的,它解释了一切。当然,您不会逐个像素和逐个值地拥有相同的区域。旋转后获得相同矩形的唯一方法是旋转为 0、90、180 或 270 度。原因是插值。

【讨论】:

  • 哦,抱歉,我使用像 this 这样的照片编辑器裁剪了旋转后的图像
  • @SurabhiVerma 所以你应该询问软件提供商他们是如何进行旋转和变形的,他们使用什么公式以及使用什么库。没有人可以回答您的问题。
  • 不,我用我的功能旋转了图像,然后用这个编辑器裁剪了感兴趣的区域。
  • @SurabhiVerma 质量较差,使用软件手动裁剪?
  • @SurabhiVerma 好的。如果我错了,没问题。您可以更新您的问题,并包含有关您如何获得两个裁剪图像的详细信息。事实上,我仍然不明白你到底做了什么。您的功能很明确,但输入是什么?另外,软件的输入是什么,步骤是什么?请使用缺少的信息编辑和更新您的问题。
猜你喜欢
  • 2019-10-27
  • 2013-08-17
  • 2019-08-23
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 2010-11-12
  • 2012-11-07
相关资源
最近更新 更多