我有一个 jpeg,我想从其中裁剪包含图形的部分(底部的部分)。
截至目前,我使用此代码来实现相同的目的:
from PIL import Image
img = Image.open(r'D:\aakash\graph2.jpg')
area = (20, 320, 1040, 590)
img2 = img.crop(area)
# img.show()
img2.show()
但我通过多次猜测 x1、y1、x2、y2 来实现这一点(猜测工作)。
Image before cropping:
Image after cropping:
我在基于某些逻辑的图像裁剪方面完全是新手。如果位置相同,如何成功裁剪所有图形以创建单独的图像?
Update:我相信,这不可能是该问题的重复,因为即使逻辑上是相同的,但聚类逻辑的工作方式是不同的。在那个问题中,只有2条垂直的白线可以划分,但是这里有两条水平线和两条垂直线,我几乎不知道如何使用KMeans来解决这种图像聚类问题。
专家的帮助sklearn 的 KMeans解决此类问题应受到高度赞赏。
这是另一种方法,但使用 PIL/Pillow 和skimage
而不是 OpenCV:
#!/usr/local/bin/python3
import numpy as np
from PIL import Image, ImageFilter
from skimage.measure import label, regionprops
# Load image and make Numpy version and greyscale PIL version
pim = Image.open('article.jpg')
n = np.array(pim)
pgr = pim.convert('L')
# Threshold to make black and white
thr = pgr.point(lambda p: p < 230 and 255)
# Following line is just for debug
thr.save('result-1.png')
# Median filter to remove noise
fil = thr.filter(ImageFilter.MedianFilter(11))
# Following line is just for debug
fil.save('result-2.png')
# Make Numpy version for skimage to use
nim = np.array(fil)
# Image is now white blobs on black background, so label() it
label_image=label(nim)
# Iterate through blobs, saving each to disk
i=0
for region in regionprops(label_image):
if region.area >= 100:
# Extract rectangle containing blob and save
name="blob-" + str(i) + ".png"
minr, minc, maxr, maxc = region.bbox
Image.fromarray(n[minr:maxr,minc:maxc,:]).save(name)
i = i + 1
这给出了这些输出图像:
中间的调试图像是result-1.png
:
and result-2.png
:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)