5

How can I crop an image using cv2 from the center?

I think it has something to do with this line, but if there is a better way please inform me.

crop_img = img[y:y+h, x:x+w]
Juicestus
  • 412
  • 7
  • 13
  • There is an answer here: https://stackoverflow.com/questions/15589517/how-to-crop-an-image-in-opencv-using-python – Stefan May 21 '20 at 05:43

2 Answers2

9

Just an additional comment for the Lenik's answer (It is the first time I want to contribute in StackOverflow and don't have enough reputation to comment the answer), you need to be sure x and y are integers.

Probably in this case x and y would always be integers as most of resolutions are even, but is a good practice to keep the values inside an int().

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

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

  • If the values are already always going to be integers this just makes it more confusing. Using `int` on `w/2` and `h/2` might be worth while, but you could also just use floor division with `//` – RedKnite May 21 '20 at 19:45
2

The line you provided crops the image region located at (x,y) with (w,h) width and height. Not sure if this is around the center of the image.

To crop (w,h) region around the center you have to do the following:

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

and only then

crop_img = img[y:y+h, x:x+w]
lenik
  • 22,629
  • 4
  • 31
  • 41