Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Kino.Input.image

livebooks/kino/input_image.livemd

Kino.Input.image

Mix.install([
  {:nx, "~> 0.9"},
  {:evision, "~> 0.2"},
  {:kino, "~> 0.14"}
])

画像選択

image_input = Kino.Input.image("IMAGE")

画像表示

image = Kino.Input.read(image_input)
image
|> Map.get(:file_ref)
|> Kino.Input.file_path()
|> File.read!()
|> Nx.from_binary(:u8)
|> Nx.reshape({image.height, image.width, 3})
|> Evision.Mat.from_nx_2d()
|> Evision.cvtColor(Evision.Constant.cv_COLOR_RGB2BGR())
image
|> Map.get(:file_ref)
|> Kino.Input.file_path()
|> File.read!()
|> Nx.from_binary(:u8)
|> Nx.reshape({image.height, image.width, 3})
|> Kino.Image.new()

PNG指定

image_input = Kino.Input.image("IMAGE", format: :png)
image = Kino.Input.read(image_input)
image
|> Map.get(:file_ref)
|> Kino.Input.file_path()
|> File.read!()
|> Evision.imdecode(Evision.Constant.cv_IMREAD_COLOR())

JPEG指定

image_input = Kino.Input.image("IMAGE", format: :jpeg)
image_input
|> Kino.Input.read()
|> Map.get(:file_ref)
|> Kino.Input.file_path()
|> File.read!()
|> Evision.imdecode(Evision.Constant.cv_IMREAD_COLOR())

リサイズ

image_input = Kino.Input.image("IMAGE", format: :png, size: {200, 500}, fit: :contain)
image_input = Kino.Input.image("IMAGE", format: :png, size: {200, 500}, fit: :match)
image_input = Kino.Input.image("IMAGE", format: :png, size: {200, 500}, fit: :pad)
image_input = Kino.Input.image("IMAGE", format: :png, size: {200, 500}, fit: :crop)

ダウンロード

Kino.Download.new(
  fn ->
    image_input
    |> Kino.Input.read()
    |> Map.get(:file_ref)
    |> Kino.Input.file_path()
    |> File.read!()
  end,
  filename: "resized.png"
)