題目:
撰寫一個程式,按照輸入的寬高,將測驗影像分割成多個補丁塊,超出影像邊界的部分用黑色像素補齊
思路:
- 按照輸入的寬高,先判斷原始影像與其取模是否為零,判斷需不需要進行影像填充
如果需要進行影像填充,先計算出新影像的寬和高((整除后+1)* 指定寬高),然后新建一張全黑影像,將原影像默認為左上角位置粘貼進去 - 最后進行影像裁剪,使用兩層for回圈,步長設定為補丁的寬高,使用crop函式,指定補丁圖片的左、上、右、下坐標
代碼:
import numpy as np
from PIL import Image
# 判斷是否需要進行影像填充
def judge(img, wi, he):
width, height = img.size
# 默認新影像尺寸初始化為原影像
new_width, new_height = img.size
if width % wi != 0:
new_width = (width//wi + 1) * wi
if height % he != 0:
new_height = (height//he + 1) * he
# 新建一張新尺寸的全黑影像
new_image = Image.new('RGB', (new_width, new_height), (0, 0, 0))
# 將原影像粘貼在new_image上,默認為左上角坐標對應
new_image.paste(img, box=None, mask=None)
new_image.show()
return new_image
# 按照指定尺寸進行圖片裁剪
def crop_image(image, patch_w, patch_h):
width, height = image.size
# 補丁計數
cnt = 0
for w in range(0, width, patch_w):
for h in range(0, height, patch_h):
cnt += 1
# 指定原圖片的左、上、右、下
img = image.crop((w, h, w+patch_w, h+patch_h))
img.save("dog-%d.jpg" % cnt)
print("圖片補丁裁剪結束,共有{}張補丁".format(cnt))
def main():
image_path = "dog.jpg"
img = Image.open(image_path)
# 查看影像形狀
print("原始影像形狀{}".format(np.array(img).shape))
# 輸入指定的補丁寬高
print("輸入補丁寬高:")
wi, he = map(int, input().split(" "))
# 進行影像填充
new_image = judge(img, wi, he)
# 圖片補丁裁剪
crop_image(new_image, wi, he)
if __name__ == '__main__':
main()
效果展示:
原影像使用了黑色像素填充

影像裁剪,分割成小補丁

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/384426.html
標籤:其他
