How to Cut an Image Vertically into Two Equal Sized Images

Viewed 12078

So I have an 800 x 600 image that I want to cut vertically into two equally sized pictures using OpenCV 3.1.0. This means that at the end of the cut, I should have two images that are 400 x 600 each and are stored in their own PIL variables.

Here's an illustration:

Paper being cut into halves

Thank you.

EDIT: I want the most efficient solution so if that solution is using numpy splicing or something like that then go for it.

3 Answers
import cv2   
# Read the image
img = cv2.imread('your file name')
print(img.shape)
height = img.shape[0]
width = img.shape[1]

# Cut the image in half
width_cutoff = width // 2
s1 = img[:, :width_cutoff]
s2 = img[:, width_cutoff:]

cv2.imwrite("file path where to be saved", s1)
cv2.imwrite("file path where to be saved", s2)

you can define following function to simply slice every image you want to two vertical parts.

def imCrop(x):
    height,width,depth = x.shape
    return [x[height , :width//2] , x[height, width//2:]]

and then you can simply for example plot the right part of the image by:

plt.imshow(imCrop(yourimage)[1])
Related