如何从中心裁剪 OpenCV 图像

9

如何使用OpenCV从图像中心裁剪图像?

我认为这个操作与以下代码有关,如果有更好的方法,请告诉我。

crop_img = img[y:y+h, x:x+w]

这里有一个答案:https://dev59.com/XGUp5IYBdhLWcg3wAj3y - Stefan
2个回答

13

对于Lenik的回答,我有一个额外的评论(这是我第一次想在StackOverflow上做出贡献,没有足够的声望来评论),你需要确保x和y是整数。

在这种情况下,x和y很可能总是整数,因为大多数解都是偶数,但最好将值保留在int()内。

center = image.shape
x = center[1]/2 - w/2
y = center[0]/2 - h/2

crop_img = img[int(y):int(y+h), int(x):int(x+w)]


如果值始终为整数,这样做只会让事情更加混乱。在w/2h/2上使用int可能是值得的,但你也可以使用地板除法符号// - RedKnite
1
整除仍将导致浮点数,如果任何操作数是浮点数。在任何情况下,注意数据类型非常重要。并非所有情况都需要使用 int(),但有些情况确实需要。 - Christoph Rackwitz
2
你不能将元组(由image.shape返回)除以一个数字。 - Danil Kononyhin
感谢@DanilKononyhin的注意。我是基于Lenik的答案进行修改的,但我只是改变了从元组中提取标量后进行除法的顺序。 - Juan Esteban Fonseca

3
你提供的代码行裁剪了位于(x,y)位置且宽度和高度为(w,h)的图像区域。不确定是否在图像中心周围。
若要在中心裁剪(w,h)区域,请执行以下操作:
center = image.shape / 2
x = center[1] - w/2
y = center[0] - h/2

仅在这种情况下

crop_img = img[y:y+h, x:x+w]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接