OO/𖣠⚪∣❁∣✤✻ᕭᕮᗩߦറ⚪𔗢⚪🞋⚪𔗢⚪റߦᗩᕭᕮ✻✤∣.../𖣠⚪ИNⓄꖴ✤ᑐᑕИNᑎꗳ𖡗ᔓᔕᑎꖴ⚭ᗩꗳ⚪𔗢⚪🞋⚪𔗢.../𖣠⚪ᗱᗴᴥᑎ✤ᗩᗯᴥᑎᑐᑕ⚪𔗢⚪🞋⚪𔗢⚪ᑐᑕᑎᴥᗯᗩ✤.../𖣠⚪ᔓᔕᴥᗱᗴИNᴥⓄᑐᑕ𖣓✤옷ᕤᕦꖴᗩᴥ✤ᔓᔕ⚪𔗢⚪.../𖣠⚪✤ИNᗱᗴꖴᗝᗩᴥᕤᕦ⚪𔗢⚪🞋⚪𔗢⚪ᕤᕦᴥᗩᗝꖴᗱ.../Yꟼ.𖣠⚪ᗱᗴ✤ᗱᗴᑎⓄ옷ᙁⵙᔓᔕ❁✤ИNᗱᗴⵙↀᗩᴥ...

81 lines
21 KiB
Plaintext
Raw Normal View History

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ᙏᑎИNᙁᗱᗴ8ᗩᙁⵙⵙᙁᗩ8ᗱᗴᙁИNᑎᙏ8ᗱᗴᴥⵙ,ⵙᔓᔕᙁᗱᗴᑐᑕᗱᗴᕤᕦᗩᙏꖴↀᗱᗴᙁᗱᗴ8ᗩᙁⵙⵙᙁᗩ8ᗱᗴᙁᗱᗴↀꖴᙏᗩᕤᕦᗱᗴᑐᑕᗱᗴᙁᔓᔕⵙ,ⵙᔓᔕᑐᑕꖴ𖧷ᔓᔕꖴ𖧷ᗩ𖧷ᔓᔕᔓᔕᙁᗱᗴᑐᑕᗱᗴᕤᕦᗩᙏꖴↀᗱᗴᙁᗱᗴ8ᗩᙁⵙⵙᙁᗩ8ᗱᗴᙁᗱᗴↀꖴᙏᗩᕤᕦᗱᗴᑐᑕᗱᗴᙁᔓᔕᔓᔕ𖧷ᗩ𖧷ꖴᔓᔕ𖧷ꖴᑐᑕᔓᔕⵙ,ⵙᔓᔕↀꖴOᴥ𖧷ИNᗱᗴᑐᑕᔓᔕᙁᗱᗴᑐᑕᗱᗴᕤᕦᗩᙏꖴↀᗱᗴᙁᗱᗴ8ᗩᙁⵙⵙᙁᗩ8ᗱᗴᙁᗱᗴↀꖴᙏᗩᕤᕦᗱᗴᑐᑕᗱᗴᙁᔓᔕᑐᑕᗱᗴИN𖧷ᴥOꖴↀᔓᔕⵙ=cv2.connectedComponentsWithStats(ⵙↀᙁO옷ᔓᔕᗱᗴᴥ옷𖧷ⵙⵙ𖧷옷ᴥᗱᗴᔓᔕ옷Oᙁↀⵙ)
ⵙᗱᗴᕤᕦᗩᙏꖴↀᗱᗴᙁᗱᗴ8ᗩᙁᗱᗴᙁߦꖴ𖧷ᙁᑎᙏⵙⵙᙏᑎᙁ𖧷ꖴߦᙁᗱᗴᙁᗩ8ᗱᗴᙁᗱᗴↀꖴᙏᗩᕤᕦᗱᗴⵙ=ⵙ人ߦᙏᑎИNⵙⵙИNᑎᙏߦ人ⵙ.zeros_like(ⵙᔓᔕᙁᗱᗴᑐᑕᗱᗴᕤᕦᗩᙏꖴↀᗱᗴᙁᗱᗴ8ᗩᙁⵙⵙᙁᗩ8ᗱᗴᙁᗱᗴↀꖴᙏᗩᕤᕦᗱᗴᑐᑕᗱᗴᙁᔓᔕⵙ)
for i in range(1,ⵙᴥᗱᗴ8ᙏᑎИNᙁᗱᗴ8ᗩᙁⵙⵙᙁᗩ8ᗱᗴᙁИNᑎᙏ8ᗱᗴᴥⵙ):ⵙᗱᗴᕤᕦᗩᙏꖴↀᗱᗴᙁᗱᗴ8ᗩᙁᗱᗴᙁߦꖴ𖧷ᙁᑎᙏⵙⵙᙏᑎᙁ𖧷ꖴߦᙁᗱᗴᙁᗩ8ᗱᗴᙁᗱᗴↀꖴᙏᗩᕤᕦᗱᗴⵙ[ⵙᔓᔕᙁᗱᗴᑐᑕᗱᗴᕤᕦᗩᙏꖴↀᗱᗴᙁᗱᗴ8ᗩᙁⵙⵙᙁᗩ8ᗱᗴᙁᗱᗴↀꖴᙏᗩᕤᕦᗱᗴᑐᑕᗱᗴᙁᔓᔕⵙ==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ᴥⵙ=(1.65625/128)/4.3393447 # 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ᙏᑎИNᙁᗱᗴ8ᗩᙁⵙⵙᙁᗩ8ᗱᗴᙁИNᑎᙏ8ᗱᗴᴥⵙ):
ⵙ𐊌ᔓᔕᗩᙏⵙ〇ⵙ〇ⵙᙏᗩᔓᔕ𐊌ⵙ=(ⵙᗱᗴᕤᕦᗩᙏꖴↀᗱᗴᙁᗱᗴ8ᗩᙁᗱᗴᙁߦꖴ𖧷ᙁᑎᙏⵙⵙᙏᑎᙁ𖧷ꖴߦᙁᗱᗴᙁᗩ8ᗱᗴᙁᗱᗴↀꖴᙏᗩᕤᕦᗱᗴⵙ==i)
ⵙᗱᗴᑐᑕИNᗩ𖧷ᔓᔕꖴↀ𖧷ИNᗱᗴꖴↀᗩᴥᕤᕦᙁᗱᗴᑐᑕↀᗱᗴᙁᗱᗴ8ᗩᙁⵙⵙᙁᗩ8ᗱᗴᙁᗱᗴↀᑐᑕᗱᗴᙁᕤᕦᴥᗩↀꖴᗱᗴИN𖧷ↀꖴᔓᔕ𖧷ᗩИNᑐᑕᗱᗴⵙ=ⵙᙏᴥOꗳᔓᔕИNᗩᴥ𖧷ᗱᗴᑐᑕИNᗩ𖧷ᔓᔕꖴↀИNᗩᗱᗴↀꖴᙁᑐᑕᑎᗱᗴⵙⵙᗱᗴᑎᑐᑕᙁꖴↀᗱᗴᗩИNↀꖴᔓᔕ𖧷ᗩИNᑐᑕᗱᗴ𖧷ᴥᗩИNᔓᔕꗳOᴥᙏⵙ[ⵙ𐊌ᔓᔕᗩᙏⵙ〇ⵙ〇ⵙᙏᗩᔓᔕ𐊌ⵙ]
ⵙᗱᗴᑐᑕИNᗩ𖧷ᔓᔕꖴↀᙏᑎᙏꖴꕤᗩᙏ𖧷ИNᗱᗴꖴↀᗩᴥᕤᕦᔓᔕᙁᗱᗴᑐᑕↀᗱᗴᙁᗱᗴ8ᗩᙁⵙⵙᙁᗩ8ᗱᗴᙁᗱᗴↀᑐᑕᗱᗴᙁᔓᔕᕤᕦᴥᗩↀꖴᗱᗴИN𖧷ᙏᗩꕤꖴᙏᑎᙏↀꖴᔓᔕ𖧷ᗩИNᑐᑕᗱᗴⵙ=ⵙ人ߦᙏᑎИNⵙⵙИNᑎᙏߦ人ⵙ.max(ⵙᗱᗴᑐᑕИNᗩ𖧷ᔓᔕꖴↀ𖧷ИNᗱᗴꖴↀᗩᴥᕤᕦᙁᗱᗴᑐᑕↀᗱᗴᙁᗱᗴ8ᗩᙁⵙⵙᙁᗩ8ᗱᗴᙁᗱᗴↀᑐᑕᗱᗴᙁᕤᕦᴥᗩↀꖴᗱᗴИN𖧷ↀꖴᔓᔕ𖧷ᗩИNᑐᑕᗱᗴⵙ)
ⵙᗱᗴᕤᕦᗩᙏꖴᙏᴥOꗳᔓᔕИNᗩᴥ𖧷ᗱᗴᑐᑕИNᗩ𖧷ᔓᔕꖴↀↀᗱᗴᙁᗱᗴ8ᗩᙁᗱᗴᙁߦꖴ𖧷ᙁᑎᙏⵙⵙᙏᑎᙁ𖧷ꖴߦᙁᗱᗴᙁᗩ8ᗱᗴᙁᗱᗴↀↀꖴᔓᔕ𖧷ᗩИNᑐᑕᗱᗴ𖧷ᴥᗩИNᔓᔕꗳOᴥᙏꖴᙏᗩᕤᕦᗱᗴⵙ[ⵙ𐊌ᔓᔕᗩᙏⵙ〇ⵙ〇ⵙᙏᗩᔓᔕ𐊌ⵙ]=ⵙ人ߦᙏᑎИNⵙⵙИNᑎᙏߦ人ⵙ.clip(ⵙᗱᗴᑐᑕИNᗩ𖧷ᔓᔕꖴↀ𖧷ИNᗱᗴꖴↀᗩᴥᕤᕦᙁᗱᗴᑐᑕↀᗱᗴᙁᗱᗴ8ᗩᙁⵙⵙᙁᗩ8ᗱᗴᙁᗱᗴↀᑐᑕᗱᗴᙁᕤᕦᴥᗩↀꖴᗱᗴИN𖧷ↀꖴᔓᔕ𖧷ᗩИNᑐᑕᗱᗴⵙ,0,ⵙᗱᗴᑐᑕИNᗩ𖧷ᔓᔕꖴↀⵙ𖧷ИNᗱᗴꖴↀᗩᴥᕤᕦⵙᙏᑎᙏꖴꕤᗩᙏⵙⵙᙏᗩꕤꖴᙏᑎᙏⵙᕤᕦᴥᗩↀꖴᗱᗴИN𖧷ⵙↀꖴᔓᔕ𖧷ᗩИNᑐᑕᗱᗴⵙ)/ⵙᗱᗴᑐᑕИNᗩ𖧷ᔓᔕꖴↀⵙ𖧷ИNᗱᗴꖴↀᗩᴥᕤᕦⵙᙏᑎᙏꖴꕤᗩᙏⵙⵙᙏᗩꕤꖴᙏᑎᙏⵙᕤᕦᴥᗩↀꖴᗱᗴИN𖧷ⵙↀꖴᔓᔕ𖧷ᗩИNᑐᑕᗱᗴⵙ
elif ⵙᔓᔕᗱᗴИNᙁᗱᗴ8ᗩᙁᗱᗴᙁߦꖴ𖧷ᙁᑎᙏⵙⵙᙏᑎᙁ𖧷ꖴߦᙁᗱᗴᙁᗩ8ᗱᗴᙁИNᗱᗴᔓᔕⵙ=="·":
for i in range(1,ⵙᴥᗱᗴ8ᙏᑎИNᙁᗱᗴ8ᗩᙁⵙⵙᙁᗩ8ᗱᗴᙁИ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()