cocoa-xu / evision

Evision: An OpenCV-Erlang/Elixir binding
https://evision.app
Apache License 2.0
322 stars 22 forks source link

feat: use Nx.tensor without converting the last dim as channels #251

Closed cocoa-xu closed 3 weeks ago

cocoa-xu commented 3 weeks ago

This PR should address #250 and #248.

Before

iex> v = Nx.broadcast(Nx.tensor(1.0, type: :f64), {120, 120, 3})
iex> Evision.gaussianBlur(v, {31, 31}, 0)
{:error,
 "OpenCV(4.10.0) /Users/runner/work/evision/evision/3rd_party/opencv/opencv-4.10.0/modules/core/src/matrix.cpp:1099: error: (-215:Assertion failed) dims <= 2 && step[0] > 0 in function 'locateROI'\n"}

After

iex> v = Nx.broadcast(Nx.tensor(1.0, type: :f64), {120, 120, 3})
iex> Evision.gaussianBlur(v, {31, 31}, 0)
%Evision.Mat{
  channels: 3,
  dims: 2,
  type: {:f, 64},
  raw_type: 22,
  shape: {120, 120, 3},
  ref: #Reference<0.542551177.3596484632.178098>
}