使用Python以循环方式裁剪图像
在本文中,我们将学习使用枕头库循环裁剪图像。圆形裁剪图像意味着在图像内选择一个圆形区域并删除圆圈外的所有内容。
方法:
- 如果您有 L 模式图像,图像将变为灰度。所以我们创建了一个模式为“L”的新图像。
- 创建一个图像,中间有一个白色圆圈,尺寸与输入图像相同。
- 将新图像转换为数组。
- 从数组转换原始图像。
- 将这两个数组堆叠在一起以仅裁剪出圆形中间部分。
让我们来看看这个初始图像:
步骤1:导入模块并读取图像。
Python3
import numpy as np
from PIL import Image, ImageDraw
img = Image.open("/content/gfg.jpeg")
display(img)
Python3
h,w = img.size
# creating luminous image
lum_img = Image.new('L',[h,w] ,0)
draw = ImageDraw.Draw(lum_img)
draw.pieslice([(0,0),(h,w)],0,360,fill=255)
img_arr = np.array(img)
lum_img_arr = np.array(lum_img)
display(Image.fromarray(lum_img_arr))
Python3
final_img_arr = np.dstack((img_arr, lum_img_arr))
display(Image.fromarray(final_img_arr))
Python3
import numpy as np
from PIL import Image, ImageDraw
img=Image.open("img.jpg")
display(img)
height,width = img.size
lum_img = Image.new('L', [height,width] , 0)
draw = ImageDraw.Draw(lum_img)
draw.pieslice([(0,0), (height,width)], 0, 360,
fill = 255, outline = "white")
img_arr =np.array(img)
lum_img_arr =np.array(lum_img)
display(Image.fromarray(lum_img_arr))
final_img_arr = np.dstack((img_arr,lum_img_arr))
display(Image.fromarray(final_img_arr))
输出:
第 2 步:创建图像。
我们将使用 pieslice()函数将图像的圆形部分变为白色,然后我们将原始图像和发光图像进行叠加。
ImageDraw.Draw.pieslice()与 arc 相同,但也在边界框的端点和中心之间绘制直线。
Syntax: PIL.ImageDraw.Draw.pieslice(xy, start, end, fill=None, outline=None)
Parameters:
xy – Four points to define the bounding box. Sequence of [(x0, y0), (x1, y1)] or [x0, y0, x1, y1].
start – Starting angle, in degrees. Angles are measured from 3 o’clock, increasing clockwise.
end – Ending angle, in degrees.
fill – Color to use for the fill.
outline – Color to use for the outline.
Returns: An Image object in pieslice shape.
代码:
蟒蛇3
h,w = img.size
# creating luminous image
lum_img = Image.new('L',[h,w] ,0)
draw = ImageDraw.Draw(lum_img)
draw.pieslice([(0,0),(h,w)],0,360,fill=255)
img_arr = np.array(img)
lum_img_arr = np.array(lum_img)
display(Image.fromarray(lum_img_arr))
输出:
第 3 步:将这两个数组堆叠在一起以仅裁剪出圆形中间部分。
蟒蛇3
final_img_arr = np.dstack((img_arr, lum_img_arr))
display(Image.fromarray(final_img_arr))
输出:
下面是完整的实现:
蟒蛇3
import numpy as np
from PIL import Image, ImageDraw
img=Image.open("img.jpg")
display(img)
height,width = img.size
lum_img = Image.new('L', [height,width] , 0)
draw = ImageDraw.Draw(lum_img)
draw.pieslice([(0,0), (height,width)], 0, 360,
fill = 255, outline = "white")
img_arr =np.array(img)
lum_img_arr =np.array(lum_img)
display(Image.fromarray(lum_img_arr))
final_img_arr = np.dstack((img_arr,lum_img_arr))
display(Image.fromarray(final_img_arr))
输出: