in my library ive already written wrappers for these opencv functions 
create-camera-capture
query-frame
img-size
create-image

the struct related to create-image is IplImage and i have it defined like this






;; ;(cffi:foreign-type-size '(:struct ipl-image)) = 144
(cffi:defcstruct ipl-image
    (n-size :int)
    (id :int)
    (n-channels :int)
    (alpha-channel :int)
    (depth :int)
    (color-model :int) ;;Ignored by OpenCV - was :pointer, changed to :int so 
the struct values would match OpenCV's
    (channel-seq :int) ;;Ignored by OpenCV - was :pointer, changed to :int so 
the struct values would match OpenCV's
    (data-order :int)
    (origin :int)
    (align :int)
    (width :int)
    (height :int)
    (roi (:pointer (:struct ipl-roi)))
    (mask-roi :pointer)
    (image-id :pointer)
    (tile-info :pointer)
    (image-size :int)
    (image-data :string)
    (width-step :int)
    (border-mode :pointer)
    (border-const :pointer)
    (image-data-origin :string))






so when i call the above functions and then print the struct values with the 
below
code it looks like this






CL-OPENCV> (defparameter capture (create-camera-capture 0))
(defparameter frame (query-frame capture))
(defparameter img-size (get-size frame))
(defparameter img (create-image img-size +ipl-depth-8u+ 3))
IMG
CL-OPENCV> (cffi:with-foreign-slots ((n-size id n-channels 
                          alpha-channel depth color-model 
                          channel-seq data-order origin  
                          align width height roi 
                          mask-roi image-id tile-info 
                          image-size image-data width-step 
                          border-mode border-const image-data-origin) 

                          img (:struct ipl-image))
                          (format t "n-size = ~a~%id = ~a~%n-channels = 
~a~%alpha-channel = ~a~%depth = ~a~%color-model = ~a~%channel-seq = 
~a~%data-order = ~a~%origin = ~a~%align = ~a~%width = ~a~%height = ~a~%roi = 
~a~%mask-roi = ~a~%image-id = ~a~%tile-info = ~a~%image-size = ~a~%image-data = 
~a~%width-step = ~a~%border-mode = ~a~%border-const = ~a~%image-data-origin = 
~a~%" 
                          n-size id n-channels 
                          alpha-channel depth color-model 
                          channel-seq data-order origin  
                          align width height roi 
                          mask-rOI image-id tile-info 
                          image-size image-data width-step 
                          border-mode border-const image-data-origin))
n-size = 144
id = 0
n-channels = 3
alpha-channel = 0
depth = 8
color-model = 4343634
channel-seq = 5392194
data-order = 0
origin = 0
align = 4
width = 640
height = 480
roi = #.(SB-SYS:INT-SAP #X00000000)
mask-roi = #.(SB-SYS:INT-SAP #X00000000)
image-id = #.(SB-SYS:INT-SAP #X00000000)
tile-info = #.(SB-SYS:INT-SAP #X00000000)
image-size = 921600
image-data = 
width-step = 1920
border-mode = #.(SB-SYS:INT-SAP #X00000000)
border-const = #.(SB-SYS:INT-SAP #X00000000)
image-data-origin = NIL
NIL





I'd rather not have to call  the with-foreign-slots function with all that code 
every time id like  to access slot values id rather do exactly like in c and 
call img->depth for example to access the IplImage  struct member depth....Is 
there a way i can have this exact functionality in lisp with the above struct 
or any other....if i did have to call (img depth) i guess that would be ok but 
id rather create  some sort of dereferencing  operator equivelant to do this as 
easy as in c....either way can someone show me how to dereference pointers in 
the tiniest way possible like in c

Reply via email to