簡體   English   中英

使用python從矩形圖像創建非矩形圖像

[英]Create a non rectangular image from a rectangular image using python

我有幾張700x400的圖片,如下圖所示 在此處輸入圖片說明

它們由兩個區域組成,一個區域由藍色表示,另一個區域由綠色表示。 這些區域由一條線隔開。 一個XML文件包含用於分隔這些區域的所有圖像(大約60個數組)的線條的單獨y軸的y軸,如下所示:

<?xml version="1.0" encoding="utf-8"?> 
<Data>
<Image>
<ImageUrl> file:///Data/1.tif </ImageUrl>
<Array> 150 144 169 199 199 200 210 ..... 344 </Array>
</Image>
<Image>
<ImageUrl> file:///Data/2.tif </ImageUrl>
<Array> 150 144 169 199 199 200 210 ..... 344 </Array>
</Image>
.
.
.
</Data>

現在,我想沿着這條線切割圖像ABCD ,只有綠色區域。 我已經看到了,但是無法正常工作。 我努力了 :

import xml.etree.ElementTree as ET
import cv2, numpy as np
tree = ET.parse("image.xml")
segArray = tree.findall(".//Image/Array")
arrayList = []
for i in range (0,len(segArray)-1):
xa = segArray[i].text.split(" ")
        arrayList.append(xa)
arrayList = np.array(arrayList)

arrayList存儲數組,但是現在我想不出一種使用這些數組來像我想的那樣剪切圖像的方法。

關於既沒有代表性圖像也沒有數據的圖像處理問題,很難回答,但是我想您想根據某種形式的XML使某些未指定圖像的頂部透明到頂部為止一定距離。

因此,我將以paddington作為輸入圖像,以正弦波作為XML,並假設您可以適應您想要做的任何事情:

在此處輸入圖片說明

並使用PIL / Pillow這樣的代碼:

#!/bin/env python3

from math import sin,cos
import numpy as np
from PIL import Image

# Create a new alpha mask, initially all white, that makes parts of image transparent
w, h = 700, 400
alpha = np.ones((h,w), dtype=np.uint8)*255

# Draw a vertical black line of length "l" from top downwards at each column position across image
for col in range(w):
    # Length of line is given by a sine wave
    l = abs(int(sin(col/30)*h/3))
    alpha[0:l, col] = 0


# Now open our image and push that alpha layer into it
im = Image.open('image.png').convert('RGB')

im.putalpha(Image.fromarray(alpha))
im.save('result.png')

結果

在此處輸入圖片說明

我創建的Alpha層看起來像這樣,並添加了紅色邊框,因此您可以在StackOverflow的白色背景上看到其范圍:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM