import urllib.request
from PIL import Image
from scipy import signal
import numpy as np
from matplotlib import pyplot as plt
urllib.request.urlretrieve(
'https://i.stack.imgur.com/iMKIP.jpg',
"img.png")
img = Image.open("img.png")
img.show()

arr = (np.array(img)<(255)/2) #I'm considering black parts as filled
plt.imshow(arr)

plt.subplot(211)
plt.imshow(arr, aspect="auto")
plt.subplot(212)
plt.plot(arr.sum(axis=0))
plt.xlim(0,arr.shape[1])

Then, in order to find local min:
x_lines = signal.find_peaks(-arr.sum(axis=0))[0]
plt.imshow(arr, aspect="auto")
plt.vlines(x_lines, 0, arr.shape[0], color="r")

Finally if we consider a threshold (for example 50 filled pixel in columns):
threshold = 50
x_lines = signal.find_peaks(-arr.sum(axis=0))[0]
x_lines = x_lines[arr.sum(axis=0)[x_lines]<threshold]
plt.imshow(arr, aspect="auto")
plt.vlines(x_lines, 0, arr.shape[0], color="r")

Edit:
To split picture you need
for i, x in enumerate(x_lines):
if i==0:
plt.imshow(arr[:,:x_lines[i]], cmap="Greys")
plt.savefig("fig%i"%i)
plt.show()
else:
plt.imshow(arr[:,x_lines[i-1]:x_lines[i]], cmap="Greys")
plt.savefig("fig%i"%i)
plt.show()
plt.imshow(arr[:,x_lines[i]:], cmap="Greys")
plt.savefig("fig%i"%(i+1))
plt.show()