這樣的一張圖片,Cut with regular equal width:
def sliceImg( img, outDir, count = 4):
w, h = img. size
eachWidth = int( w / count)
for i in range( count):
box = ( i * eachWidth, 0, ( i + 1) * eachWidth, h)
img. crop( box). save( outDir + str( i) + ".png")
It can be seen that the cutting effect is poor,3all cut8了.
We can change our minds,Pixel judgment in the vertical direction is performed before and after the target position,Determine that a column has the fewest black pixels,It's the cutting point.代碼改成:
def smartSliceImg( img, outDir, count = 4, p_w = 3):
'''
:param img:
:param outDir:
:param count: How many pictures are in the picture
:param p_w: Judge how many pixels in the cutting place
:return:
'''
w, h = img. size
pixdata = img. load()
eachWidth = int( w / count)
beforeX = 0
for i in range( count):
allBCount = []
nextXOri = ( i + 1) * eachWidth
for x in range( nextXOri - p_w, nextXOri + p_w):
if x >= w:
x = w - 1
if x < 0:
x = 0
b_count = 0
for y in range( h):
if pixdata[ x, y] == 0:
b_count += 1
allBCount. append({ 'x_pos': x, 'count': b_count})
sort = sorted( allBCount, key = lambda e: e. get( 'count'))
nextX = sort[ 0][ 'x_pos']
box = ( beforeX, 0, nextX, h)
img. crop( box). save( outDir + str( i) + ".png")
beforeX = nextX
You can see that the cutting effect is much better,But this still can't handle the oblique situation.
http://www.waitingfy.com/archives/3778