裁剪图像会降低图像质量

时间:2018-04-06 17:03:47

标签: opencv

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

我使用旋转的函数并裁剪感兴趣的区域。但是,此功能的裁剪图像输出与手动裁剪(通过照片编辑器或绘画)图像有所不同。 旋转的图像如下 enter image description here手动裁剪的图像(旋转图像作为输入)如下所示 enter image description here

我从该功能获得的图像如下enter image description here

你可以看到差异。在功能输出的情况下,边缘不清晰并且定义良好。我该如何解决这个问题?

功能如下

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)

提前致谢!

1 个答案:

答案 0 :(得分:0)

我希望更多地澄清你如何裁剪图像&#34;手动&#34;。但是,既然你用你的问题中的相同词语回复了我的评论,我将在此基于猜测回答。

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