I have a rectangular image. I need a way to use PIL or OpenCV to split it into sections of x many pixels tall. I have looked at the forms but all I could find are things to split into tiles. Does anybody know how to accomplish this?
Asked
Active
Viewed 268 times
-1
-
What code have you tried so far? – Poojan Oct 20 '19 at 21:45
-
Here's how you read pixels: https://stackoverflow.com/questions/11064786/get-pixels-rgb-using-pil. That should be enough info to create rows of pixels. – zvone Oct 20 '19 at 21:46
-
Use the crop method. It returns a new image so you can crop the same image many times to get each row – Oli Oct 20 '19 at 21:47
-
1what is difference between `tiles` and `"sections of x many pixels tall"` ? – furas Oct 20 '19 at 23:31
1 Answers
0
Here is some code that does what you asked:
The split_into_rows
function does all the actual splitting, and is a generator. It repeatedly uses the crop method to extract rectangular sections from the image and yield them.
from PIL import Image
import os
im = Image.open('input_image.png')
def split_into_rows(im, row_height):
y = 0
print(im.height)
while y < im.height:
top_left = (0, y)
bottom_right = (im.width, min(y + row_height, im.height))
yield im.crop((*top_left, *bottom_right))
y += row_height
OUTPUT_DIR = 'output'
for i, row in enumerate(split_into_rows(im, 400)):
save_path = os.path.join(OUTPUT_DIR, f'{i}.png')
row.save(save_path)
print(i)

Oli
- 2,507
- 1
- 11
- 23