我使用旋转的函数并裁剪感兴趣的区域。但是,此功能的裁剪图像输出与手动裁剪(通过照片编辑器或绘画)图像有所不同。 旋转的图像如下 手动裁剪的图像(旋转图像作为输入)如下所示
你可以看到差异。在功能输出的情况下,边缘不清晰并且定义良好。我该如何解决这个问题?
功能如下
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)
提前致谢!
答案 0 :(得分:0)
我希望更多地澄清你如何裁剪图像&#34;手动&#34;。但是,既然你用你的问题中的相同词语回复了我的评论,我将在此基于猜测回答。
首先让我们看看你的功能是做什么的。
从签名def crop_minAreaRect(img, rect):
开始,它接受一个图像和一个定义裁剪位置的矩形。它还定义了轮换。该函数使用该旋转并使用它来转换图像。
您的问题是手动裁剪和使用此功能裁剪的原因不同。但首先你是如何手动裁剪的?程序是什么?你按照同样的步骤做了什么?你怎么用手动&#34;旋转图像?
我的猜测这里是您首先从图像中裁剪矩形,然后在使用此功能裁剪之前图像经历了多次变换。如果这是真的,它解释了一切。当然,您不会逐个像素地逐个区域和值。旋转后获得相同矩形的唯一方法是旋转为0度,90度,180度或270度。原因是插值。