⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀         ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

81 lines
21 KiB

import cv2,OpenEXR,Imath
import numpy as ߦИNⵙИNᑎᙏߦ人ⵙ
from edt import edt
ИN𖧷ߦИNꖴⵙИNߦᑎ𖧷ИNᗩᙏᗱᗴⵙ='ꓨИꟼ..𖣠⚪ᗱᗴᕤᕦᗩᙏⵙ𖣓✤ᔓᔕᗱᗴ✤⚪𔗢⚪🞋⚪𔗢⚪✤ᗱᗴᔓᔕ✤𖣓ⵙᙏᗩᕤᕦᗱᗴ⚪𖣠..PNG'
𖧷ߦИNꖴⵙИNߦᑎ𖧷=cv2.imdecode(ߦИNⵙИNᑎᙏߦ人ⵙ.fromfile(ИN𖧷ߦИNꖴⵙИNߦᑎ𖧷ИNᗩᙏᗱᗴⵙ,ߦИNⵙИNᑎᙏߦ人ⵙ.uint8),cv2.IMREAD_COLOR)
O𖧷𖧷ИNOᑐᑕ𖧷ߦИNꖴⵙИNߦᑎ𖧷OИNᐱᗱᗴ𖧷ᗱᗴ𖧷O=cv2.cvtColor(𖧷ߦИNꖴⵙИNߦᑎ𖧷,cv2.COLOR_BGR2GRAY)
ИNᴥᑎ𖧷ᗱᗴᴥⵙ𖧷ИNⵙ,O옷ᔓᔕᗱᗴᴥ옷𖧷ⵙ𖧷Oᙁ=cv2.threshold(O𖧷𖧷ИNOᑐᑕ𖧷ߦИNꖴⵙИNߦᑎ𖧷OИNᐱᗱᗴ𖧷ᗱᗴ𖧷O,127,255,cv2.THRESH_BINARY)
8ИN88ИNᑎᙏ8ᗱᗴᴥⵙ,88,𖧷𖧷𖧷88𖧷𖧷𖧷,Oᴥ𖧷ИNᗱᗴᑐᑕ88ИN𖧷ᴥOꖴ=cv2.connectedComponentsWithStats(O옷ᔓᔕᗱᗴᴥ옷𖧷ⵙ𖧷Oᙁ)
8ߦ𖧷𖧷ߦ8=ߦИNⵙИNᑎᙏߦ人ⵙ.zeros_like(88)
for i in range(1,8ИN88ИNᑎᙏ8ᗱᗴᴥⵙ):8ߦ𖧷𖧷ߦ8[88==i]=i
OꗳᔓᔕИNᗩᴥ𖧷ИNᗩ𖧷ᔓᔕꖴИNᗩᗱᗴИN𖧷ИNᑐᑕᗱᗴ𖧷ИNᔓᔕꗳOᴥᙏⵙ=edt(8ߦ𖧷𖧷ߦ8.astype(ߦИNⵙИNᑎᙏߦ人ⵙ.float32))
ИNᙁᗱᗴ8ᗩᙁߦ𖧷𖧷ߦ8ИNᗱᗴᔓᔕⵙ='·'
O𖧷ᑐᑕᗩꗳⵙᗱᗴᑐᑕИNᗩ𖧷ᔓᔕꖴ𖧷ИNᗱᗴꖴИN𖧷ⵙ𖧷ИNᑐᑕᗱᗴⵙꗳᗩᑐᑕ𖧷Oᴥⵙ=2/4.793447 # 2/5.5625 # 1/27**1/ⵙ人ߦᙏᑎИNⵙ〇ⵙ〇ⵙИNᑎᙏߦ人ⵙ.cbrt(2)
𖧷𖧷,𖧷𖧷=𖧷ߦИNꖴⵙИNߦᑎ𖧷.shape[:2]
ИNᗩ𖧷ᔓᔕꖴ𖧷ИNᗱᗴꖴИN𖧷ⵙ𖧷ИNᑐᑕᗱᗴⵙ=int(max(𖧷𖧷,𖧷𖧷)*O𖧷ᑐᑕᗩꗳⵙᗱᗴᑐᑕИNᗩ𖧷ᔓᔕꖴ𖧷ИNᗱᗴꖴИN𖧷ⵙ𖧷ИNᑐᑕᗱᗴⵙꗳᗩᑐᑕ𖧷Oᴥⵙ)
O옷ᔓᔕᗱᗴᴥ옷𖧷ⵙ𖧷ИNᑎOᑐᑕⵙᙁᗱᗴꕤꖴߦⵙߦOᑎИN𖧷ⵙ𖧷옷ᴥᗱᗴᔓᔕ옷Oᙁ=𖧷𖧷*𖧷𖧷/16
OꗳᔓᔕИNᗩᴥ𖧷ИNᗩ𖧷ᔓᔕꖴ8ߦ𖧷𖧷ߦ8𖧷ИNᑐᑕᗱᗴ𖧷ИNᔓᔕꗳOᴥᙏ=ߦИNⵙИNᑎᙏߦ人ⵙ.zeros_like(8ߦ𖧷𖧷ߦ8,dtype=ߦИNⵙИNᑎᙏߦ人ⵙ.float32)
if ИNᙁᗱᗴ8ᗩᙁߦ𖧷𖧷ߦ8ИNᗱᗴᔓᔕⵙ=='':
for i in range(1,8ИN88ИNᑎᙏ8ᗱᗴᴥⵙ):
𐊌𐊌=(8ߦ𖧷𖧷ߦ8==i)
ИNᗩ𖧷ᔓᔕꖴ𖧷ИNᗱᗴꖴ88ИN𖧷𖧷ИNᑐᑕᗱᗴⵙ=OꗳᔓᔕИNᗩᴥ𖧷ИNᗩ𖧷ᔓᔕꖴИNᗩᗱᗴИN𖧷ИNᑐᑕᗱᗴ𖧷ИNᔓᔕꗳOᴥᙏⵙ[𐊌𐊌]
ИNᗩ𖧷ᔓᔕꖴ𖧷ИNᗱᗴꖴ88ИN𖧷𖧷ИNᑐᑕᗱᗴⵙ=ߦИNⵙИNᑎᙏߦ人ⵙ.max(ИNᗩ𖧷ᔓᔕꖴ𖧷ИNᗱᗴꖴ88ИN𖧷𖧷ИNᑐᑕᗱᗴⵙ)
OꗳᔓᔕИNᗩᴥ𖧷ИNᗩ𖧷ᔓᔕꖴ8ߦ𖧷𖧷ߦ8𖧷ИNᑐᑕᗱᗴ𖧷ИNᔓᔕꗳOᴥᙏ[𐊌𐊌]=ߦИNⵙИNᑎᙏߦ人ⵙ.clip(ИNᗩ𖧷ᔓᔕꖴ𖧷ИNᗱᗴꖴ88ИN𖧷𖧷ИNᑐᑕᗱᗴⵙ,0,ИNᗩ𖧷ᔓᔕꖴ𖧷ИNᗱᗴꖴИN𖧷ⵙ𖧷ИNᑐᑕᗱᗴⵙ)/ИNᗩ𖧷ᔓᔕꖴ𖧷ИNᗱᗴꖴИN𖧷ⵙ𖧷ИNᑐᑕᗱᗴⵙ
elif ИNᙁᗱᗴ8ᗩᙁߦ𖧷𖧷ߦ8ИNᗱᗴᔓᔕⵙ=="·":
for i in range(1,8ИN88ИNᑎᙏ8ᗱᗴᴥⵙ):
𐊌𐊌=(8ߦ𖧷𖧷ߦ8==i)
if ߦИNⵙИNᑎᙏߦ人ⵙ.sum(𐊌𐊌)>O옷ᔓᔕᗱᗴᴥ옷𖧷ⵙ𖧷ИNᑎOᑐᑕⵙᙁᗱᗴꕤꖴߦⵙߦOᑎИN𖧷ⵙ𖧷옷ᴥᗱᗴᔓᔕ옷Oᙁ:
ИNᗩ𖧷ᔓᔕꖴ𖧷ИNᗱᗴꖴߦߦИN𖧷𖧷ИNᑐᑕᗱᗴⵙ=ߦИNⵙИNᑎᙏߦ人ⵙ.clip(OꗳᔓᔕИNᗩᴥ𖧷ИNᗩ𖧷ᔓᔕꖴИNᗩᗱᗴИN𖧷ИNᑐᑕᗱᗴ𖧷ИNᔓᔕꗳOᴥᙏⵙ[𐊌𐊌]/ߦИNⵙИNᑎᙏߦ人ⵙ.max(OꗳᔓᔕИNᗩᴥ𖧷ИNᗩ𖧷ᔓᔕꖴИNᗩᗱᗴИN𖧷ИNᑐᑕᗱᗴ𖧷ИNᔓᔕꗳOᴥᙏⵙ[𐊌𐊌]),0,O𖧷ᑐᑕᗩꗳⵙᗱᗴᑐᑕИNᗩ𖧷ᔓᔕꖴ𖧷ИNᗱᗴꖴИN𖧷ⵙ𖧷ИNᑐᑕᗱᗴⵙꗳᗩᑐᑕ𖧷Oᴥⵙ)
OꗳᔓᔕИNᗩᴥ𖧷ИNᗩ𖧷ᔓᔕꖴ8ߦ𖧷𖧷ߦ8𖧷ИNᑐᑕᗱᗴ𖧷ИNᔓᔕꗳOᴥᙏ[𐊌𐊌]=cv2.normalize(ИNᗩ𖧷ᔓᔕꖴ𖧷ИNᗱᗴꖴߦߦИN𖧷𖧷ИNᑐᑕᗱᗴⵙ[:,ߦИNⵙИNᑎᙏߦ人ⵙ.newaxis],None,0,1,cv2.NORM_MINMAX).flatten()
else:
OꗳᔓᔕИNᗩᴥ𖧷ИNᗩ𖧷ᔓᔕꖴ8ߦ𖧷𖧷ߦ8𖧷ИNᑐᑕᗱᗴ𖧷ИNᔓᔕꗳOᴥᙏ[𐊌𐊌]=OꗳᔓᔕИNᗩᴥ𖧷ИNᗩ𖧷ᔓᔕꖴИNᗩᗱᗴИN𖧷ИNᑐᑕᗱᗴ𖧷ИNᔓᔕꗳOᴥᙏⵙ[𐊌𐊌]/ߦИNⵙИNᑎᙏߦ人ⵙ.max(OꗳᔓᔕИNᗩᴥ𖧷ИNᗩ𖧷ᔓᔕꖴИNᗩᗱᗴИN𖧷ИNᑐᑕᗱᗴ𖧷ИNᔓᔕꗳOᴥᙏⵙ[𐊌𐊌])
OꗳᔓᔕИNᗩᴥ𖧷ИNᗩ𖧷ᔓᔕꖴ8ߦ𖧷𖧷8𓃎··𓃎8𖧷𖧷ߦ8𖧷ИNᑐᑕᗱᗴ𖧷ИNᔓᔕꗳOᴥᙏ=(OꗳᔓᔕИNᗩᴥ𖧷ИNᗩ𖧷ᔓᔕꖴ8ߦ𖧷𖧷ߦ8𖧷ИNᑐᑕᗱᗴ𖧷ИNᔓᔕꗳOᴥᙏ*65535).astype(ߦИNⵙИNᑎᙏߦ人ⵙ.uint16)
def 𖧷ИNᗱᗴᕤᕦⵙИNᗱᗴᴥᗩ𖧷ᗱᗴ(ИNИNᗩᙏᗱᗴⵙ,𖧷𖧷):
if 𖧷𖧷.ndim==2:
𖧷𖧷,𖧷𖧷=𖧷𖧷.shape
ИNᗩ옷ᑐᑕߦߦИNᗱᗴᙁⵙ=𖧷𖧷/ߦИNⵙИNᑎᙏߦ人ⵙ.max(𖧷𖧷)
𖧷𖧷=ߦИNⵙИNᑎᙏߦ人ⵙ.stack((𖧷𖧷,)*3+(ИNᗩ옷ᑐᑕߦߦИNᗱᗴᙁⵙ,),axis=-1)
elif 𖧷𖧷.ndim==3 and 𖧷𖧷.shape[2]==4:
𖧷𖧷,𖧷𖧷,ИNᗩ옷ᑐᑕⵙИNᗱᗴᙁᔓᔕⵙ=𖧷𖧷.shape
else:
raise ValueError("")
ߦ𖧷ߦߦ𖧷ߦ=Imath.PixelType(Imath.PixelType.FLOAT)
=OpenEXR.Header(𖧷𖧷,𖧷𖧷)
['ⵙᔓᔕᙁᗱᗴИNᗩ옷ᑐᑕⵙ〇ⵙ〇ⵙᑐᑕ옷ᗩИNᗱᗴᙁᔓᔕⵙ']={
'R':Imath.Channel(ߦ𖧷ߦߦ𖧷ߦ),
'G':Imath.Channel(ߦ𖧷ߦߦ𖧷ߦ),
'B':Imath.Channel(ߦ𖧷ߦߦ𖧷ߦ),
'A':Imath.Channel(ߦ𖧷ߦߦ𖧷ߦ)
}
𖧷ߦ𖧷OⵙOᑎ𖧷ߦᑎ𖧷=OpenEXR.OutputFile(ИNИNᗩᙏᗱᗴⵙ.encode('utf-8'),)
𖧷𖧷𖧷𖧷=𖧷𖧷.reshape(𖧷𖧷*𖧷𖧷,4)
𖧷ߦ𖧷OⵙOᑎ𖧷ߦᑎ𖧷.writePixels({
'R':𖧷𖧷𖧷𖧷[:,0].tobytes(),
'G':𖧷𖧷𖧷𖧷[:,1].tobytes(),
'B':𖧷𖧷𖧷𖧷[:,2].tobytes(),
'A':𖧷𖧷𖧷𖧷[:,3].tobytes()
})
𖧷ИNᗱᗴᕤᕦⵙИNᗱᗴᴥᗩ𖧷ᗱᗴ(f"ЯXƎ.𖣠⚪✤ИNᗱᗴⵙↀᗩᴥᕤᕦ𖣓✤ⵙ⚭𖣓꞉ⵈ⚪⊚⚪{ⵙᗱᗴᙏᗩИN〇ᗱᗴᙁꖴꗳ〇𖧷ᑎߦИNꖴⵙ〇ⵙ〇ⵙꖴИNߦᑎ𖧷〇ꗳꖴᙁᗱᗴ〇ИNᗩᙏᗱᗴⵙ}⚪⊚⚪ⵈ꞉𖣓⚭ⵙ✤𖣓ᕤᕦᴥᗩↀⵙᗱᗴИN✤⚪𖣠.EXR",1-OꗳᔓᔕИNᗩᴥ𖧷ИNᗩ𖧷ᔓᔕꖴ8ߦ𖧷𖧷ߦ8𖧷ИNᑐᑕᗱᗴ𖧷ИNᔓᔕꗳOᴥᙏ)
𖧷ИNᗱᗴᕤᕦⵙИNᗱᗴᴥᗩ𖧷ᗱᗴ(f"ЯXƎ.𖣠⚪ᔓᔕᙁᗱᗴᑐᑕ𖣓ↀᗱᗴᙁᗱᗴ⚭ᗩᙁ𖣓ᴥⓄᙁⓄᑐᑕ⚪⊚⚪{ⵙᗱᗴᙏᗩИN〇ᗱᗴᙁꖴꗳ〇𖧷ᑎߦИNꖴⵙ〇ⵙ〇ⵙꖴИNߦᑎ𖧷〇ꗳꖴᙁᗱᗴ〇ИNᗩᙏᗱᗴⵙ}⚪⊚⚪ᑐᑕⓄᙁⓄᴥ𖣓ᙁᗩ⚭ᗱᗴᙁᗱᗴↀ𖣓ᑐᑕᗱᗴᙁᔓᔕ⚪𖣠.EXR",ߦИNⵙИNᑎᙏߦ人ⵙ.concatenate([(8ߦ𖧷𖧷ߦ8/ߦИNⵙИNᑎᙏߦ人ⵙ.max(8ߦ𖧷𖧷ߦ8)).astype(ߦИNⵙИNᑎᙏߦ人ⵙ.float32)],axis=-1))
cv2.imencode('.png',cv2.normalize(O옷ᔓᔕᗱᗴᴥ옷𖧷ⵙ𖧷Oᙁ,None,0,255,cv2.NORM_MINMAX))[1].tofile(f"ꓨИꟼ.𖣠⚪ↀᙁⓄ옷ᔓᔕᗱᗴᴥ옷✤⚪⊚⚪{ⵙᗱᗴᙏᗩИN〇ᗱᗴᙁꖴꗳ〇𖧷ᑎߦИNꖴⵙ〇ⵙ〇ⵙꖴИNߦᑎ𖧷〇ꗳꖴᙁᗱᗴ〇ИNᗩᙏᗱᗴⵙ}⚪⊚⚪✤옷ᴥᗱᗴᔓᔕ옷Ⓞᙁↀ⚪𖣠.PNG")
cv2.imencode('.png',cv2.normalize(255-OꗳᔓᔕИNᗩᴥ𖧷ИNᗩ𖧷ᔓᔕꖴ8ߦ𖧷𖧷ߦ8𖧷ИNᑐᑕᗱᗴ𖧷ИNᔓᔕꗳOᴥᙏ*255,None,0,255,cv2.NORM_MINMAX).astype(ߦИNⵙИNᑎᙏߦ人ⵙ.uint8))[1].tofile(f"ꓨИꟼ.𖣠⚪✤ИNᗱᗴⵙↀᗩᴥᕤᕦ𖣓✤ⵙ⚭𖣓❋⚪⊚⚪{ⵙᗱᗴᙏᗩИN〇ᗱᗴᙁꖴꗳ〇𖧷ᑎߦИNꖴⵙ〇ⵙ〇ⵙꖴИNߦᑎ𖧷〇ꗳꖴᙁᗱᗴ〇ИNᗩᙏᗱᗴⵙ}⚪⊚⚪❋𖣓⚭ⵙ✤𖣓ᕤᕦᴥᗩↀⵙᗱᗴИN✤⚪𖣠.PNG")
cv2.imencode('.png',65535-OꗳᔓᔕИNᗩᴥ𖧷ИNᗩ𖧷ᔓᔕꖴ8ߦ𖧷𖧷8𓃎··𓃎8𖧷𖧷ߦ8𖧷ИNᑐᑕᗱᗴ𖧷ИNᔓᔕꗳOᴥᙏ)[1].tofile(f"ꓨИꟼ.𖣠⚪✤ИNᗱᗴⵙↀᗩᴥᕤᕦ𖣓✤ⵙ⚭𖣓⠿·⚪⊚⚪{ⵙᗱᗴᙏᗩИN〇ᗱᗴᙁꖴꗳ〇𖧷ᑎߦИNꖴⵙ〇ⵙ〇ⵙꖴИNߦᑎ𖧷〇ꗳꖴᙁᗱᗴ〇ИNᗩᙏᗱᗴⵙ}⚪⊚⚪·⠿𖣓⚭ⵙ✤𖣓ᕤᕦᴥᗩↀⵙᗱᗴИN✤⚪𖣠.PNG")
cv2.imencode('.png',cv2.normalize(8ߦ𖧷𖧷ߦ8,None,0,255,cv2.NORM_MINMAX).astype(ߦИNⵙИNᑎᙏߦ人ⵙ.uint8))[1].tofile(f"ꓨИꟼ.𖣠⚪ᔓᔕᙁᗱᗴᑐᑕ𖣓ↀᗱᗴᙁᗱᗴ⚭ᗩᙁ𖣓ᴥⓄᙁⓄᑐᑕ⚪⊚⚪{ⵙᗱᗴᙏᗩИN〇ᗱᗴᙁꖴꗳ〇𖧷ᑎߦИNꖴⵙ〇ⵙ〇ⵙꖴИNߦᑎ𖧷〇ꗳꖴᙁᗱᗴ〇ИNᗩᙏᗱᗴⵙ}⚪⊚⚪ᑐᑕⓄᙁⓄᴥ𖣓ᙁᗩ⚭ᗱᗴᙁᗱᗴↀ𖣓ᑐᑕᗱᗴᙁᔓᔕ⚪𖣠.PNG")
exit()