opencl implementation of canny edge algorithm on java.awt.image.BufferedImage
I need some help understanding the opencl implementation for the canny edge detection algorithm.
I'm trying to compile and run this with jocl, with a java.awt.image.BufferedImage and I've succeeded in getting the kernals compiling. However, when I pass in the array into the kernal, I get no output and the output of the first stage looks like this:
Please let me know what I'm doing wrong and what else I may be able to do.
The source code looks something like this. I followed the compilation process for
https://github.com/opencv/opencv/blob/master/modules/imgproc/src/canny.cpp#L227
https://github.com/opencv/opencv/blob/master/modules/imgproc/src/opencl/canny.cl#L119
```
(def canny-stage1 (kernel/load-executive
{:name "stage1_with_sobel"
:file "opencl/canny.cl"
:options "-D WITH_SOBEL -D cn=1 -D TYPE=uchar -D convert_floatN=convert_float -D floatN=float -D GRP_SIZEX=32 -D GRP_SIZEY=8 -D L2GRAD"
:worksize (fn [src _ _ _ _ map _ _ _ _]
[(.getWidth src)
(.getHeight src)])
:arglist [{:type :image
:name :src
:buffer {:input true}
:flags [:read-only]}
{:type :int
:name :src-step}
{:type :int
:name :src-offset}
{:type :int
:name :rows}
{:type :int
:name :cols}
{:type :image
:name :map
:buffer {:output true}
:flags [:write-only]}
{:type :int
:name :map-step}
{:type :int
:name :map-offset}
{:type :float
:name :low-threshold}
{:type :float
:name
:high-threshold}]})) :high-threshold}]}))
(def input (javax.imageio.ImageIO/read (io/file
"lena-1000x1000.jpg")) "lena-1000x1000.jpg"))
(def buffer (BufferedImage. (.getWidth input)
(.getHeight input)
BufferedImage/TYPE_BYTE_GRAY)) BufferedImage/TYPE_BYTE_GRAY))
(let [offset 0
step (.getWidth input)
rows (.getHeight input)
cols (.getWidth input)]
(canny-stage1 input
step
offset
rows
cols
buffer
step
offset
low-threshold
high-threshold)) high-threshold))
(display-image
buffer) ```
buffer)