Conversion
Mix.install([
{:image, "~> 0.54"},
{:nx, "~> 0.9"},
{:evision, "~> 0.2"},
{:req, "~> 0.5"},
{:kino, "~> 0.14"}
])
画像の読込
ryo_img =
"https://www.elixirconf.eu/assets/images/ryo-wakabayashi.jpg"
|> Req.get!()
|> Map.get(:body)
|> Image.from_binary!()
Image -> Nx
nx_ryo_img = Image.to_nx!(ryo_img)
Kino.Image.new(nx_ryo_img)
Nx -> Image
{:ok, image_ryo_img} = Image.from_nx(nx_ryo_img)
image_ryo_img
Image -> evision
{:ok, evision_ryo_img} =
ryo_img
|> Image.split_alpha()
|> elem(0)
|> Image.to_evision()
evision_ryo_img
evision -> Image
{:ok, image_ryo_img} = Image.from_evision(evision_ryo_img)
image_ryo_img
組み合わせ処理
input =
Nx.tensor(
[
[0, 0],
[0, 512],
[512, 0],
[512, 512]
],
type: :f32
)
output =
Nx.tensor(
[
[192, 256],
[0, 512],
[320, 256],
[512, 512]
],
type: :f32
)
perspective_mat = Evision.getPerspectiveTransform(input, output)
ryo_img
|> Image.split_alpha()
|> elem(0)
|> Image.Draw.rect!(190, 200, 180, 200, fill: false, color: :red, stroke_width: 24)
|> Image.to_evision()
|> elem(1)
|> Evision.warpPerspective(perspective_mat, {512, 512})
|> Image.from_evision()
|> elem(1)