defmodule Evision.HighGui do
@moduledoc """
High-level Graphical User Interface
"""
@doc """
Show a mat in a named window
#### Positional Arguments
- **winname**. `String`
The name of the window.
- **mat**. `Evision.Mat`
The image.
#### Example
```elixir
iex> mat = Evision.imread!("example.jpg")
iex> Evision.imshow("OpenCV", mat)
# the following line may be necessary on your system
# will try to improve this later
iex> Evision.waitkey(0)
```
"""
@doc namespace: :"cv.highgui"
@spec imshow(String.t(), Evision.Mat.maybe_mat_in() | Nx.Tensor.t()) ::
:ok | {:error, String.t()}
def imshow(winname, mat) when is_binary(winname) and (is_reference(mat) or is_struct(mat)) do
mat = Evision.Internal.Structurise.from_struct(mat)
:evision_nif.imshow(winname: winname, mat: mat)
end
@doc """
Wait for user keyboard event for a `delay` amount of time (ms)
#### Positional Arguments
- **delay**. `int`
Wait for `delay` ms.
"""
@doc namespace: :"cv.highgui"
@spec waitKey(integer()) :: :ok | {:error, String.t()}
def waitKey(delay) when is_integer(delay) do
:evision_nif.waitKey(delay: delay)
end
@doc """
Close a named window
#### Positional Arguments
- **winname**. `String`
The name of the window.
"""
@doc namespace: :"cv.highgui"
@spec destroyWindow(String.t()) :: :ok | {:error, String.t()}
def destroyWindow(winname) when is_binary(winname) do
:evision_nif.destroyWindow(winname: winname)
end
@doc """
Close all windows
"""
@doc namespace: :"cv.highgui"
@spec destroyAllWindows() :: :ok
def destroyAllWindows do
:evision_nif.destroyAllWindows()
end
end