如何使用 Python PIL 或 CV 裁剪图像?
Posted
技术标签:
【中文标题】如何使用 Python PIL 或 CV 裁剪图像?【英文标题】:How to crop the Image using Python PIL or CV? 【发布时间】:2018-02-14 08:18:58 【问题描述】:我的所有图像都具有以虚线为界的感兴趣区域。 我只想裁剪那些部分。
我有一个想法,找到左上角的最小值(x,y)并找到右下角的最大值(x,y)并裁剪该区域?
我们可以从 PIL 库中获取像素值
【问题讨论】:
也许您愿意向我们展示您的图片,这样我们就不必猜测您的意思了... 【参考方案1】:from PIL import Image
from IPython.display import display, html
from IPython.display import Image as displayImage
img=Image.open('image.png')
imag_rgb = img.convert('RGB')
width, height = imag_rgb.size
print (width, height)
for pixel_x in range(width):
for pixel_y in range(height):
r, g, b = rgb_img.getpixel((pixel_x, pixel_y))
if(r == 255 and g == 255 and b == 255):
min_pixel_x = pixel_x
min_pixel_y = pixel_y
max_pixel_x = pixel_x
max_pixel_y = pixel_y
print (pixel_x, pixel_y)
cropped_image = img.crop((min_pixel_x, min_pixel_y,max_pixel_x + 1, max_pixel_y + 1))
#### +1 because of first x,y is 0,0
display(cropped_image)
【讨论】:
【参考方案2】:使用 opencv2 很容易裁剪图像。试试这个链接
http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_core/py_basic_ops/py_basic_ops.html
ball = img[280:340, 330:390]
由于 Image 是一个二维数组,您可以使用上面的线进行裁剪。
【讨论】:
【参考方案3】:读取 PIL 中的像素值
from PIL import Image
im = Image.open(imagename)
pix = im.load()
print (pix[0,0])
这将返回第一行中的第一个像素。
如果你想读取所有像素,你可以这样做。
x, y = im.size
for i in x:
for j in y:
print (pix[i,j])
【讨论】:
这不是一个好方法。避免 for 循环,它们很慢。切片应该是首选。查看其他答案。以上是关于如何使用 Python PIL 或 CV 裁剪图像?的主要内容,如果未能解决你的问题,请参考以下文章