On Wed, May 27, 2009 at 3:09 PM, Chris Colbert <[email protected]> wrote:
> Lisandro,
>
> Unfortunately, I'm on a windows machine and thus can't use valgrind.
>

Wow... Well, not in a good position to help you... Anyway, Did you
build OpenCV with EXACTLY the same compiler your installed Python was
built?

---

> I went ahead and exposed all (actually like 97%) of the contants in OpenCV
> to python using the method you described.
>
> Now, my wrapper works for the contants:  CV_INTER_NN and CV_INTER_AREA
>
> but fails on CV_INTER_LINEAR and CV_INTER_CUBIC which have the integer
> values 1 and 2 respectively, when printed to the console.
>
> I haven't asked on the OpenCV lists yet because this seems to be a problem
> in my code or a bug in Cython (given that it all works in pure C).
>
> that will be my next stop though, if we can't figure it out here.
>
> Do you think posting the Cython generated code will help?
>
> Cheers!
>
> Chris
>
> On Wed, May 27, 2009 at 12:21 PM, Lisandro Dalcin <[email protected]> wrote:
>>
>> On Wed, May 27, 2009 at 1:03 PM, Chris Colbert <[email protected]>
>> wrote:
>> > I've never used valgrind before. Any pointers?
>> >
>>
>> Just run
>>
>> $ valgrind python somescript.py
>>
>> You may get a lot of junk warnings because of Python's mem allocator
>> implementation. There is a way to suppress them,
>>
>> $ valgrind --suppressions=/path/to/valgrind-python.supp python
>> somescript.py
>>
>> You may have valgrind-python.supp installed somewhere (from package
>> python-devel), for example, in my Fedora 10 box, it is at.
>>
>> /usr/share/doc/python-devel-2.5.2/valgrind-python.supp
>>
>> Perhaps a good idea (I'm doing that) is to add an executable shell
>> script in your $HOME/bin (assuming that dir in on $PATH), like this:
>>
>> $ cat $HOME/bin/valgrind-py
>> #!/bin/sh
>> valgrind --suppressions=$HOME/lib/valgrind-python.supp $@
>>
>> Then I run Python under Valgrind like this:
>>
>> $ valgrind-py python somescript.py
>>
>> You could even modify the script to add 'python' before the $@, I do
>> not do that just because I want to use it against many Python
>> versions. But perhaps this is not an issue for you.
>>
>>
>>
>> > I went back to the Cython generated C source and explicitly included the
>> > appropriate header file and explicitly passed CV_INTER_LINEAR (defined
>> > as 1)
>> > to the C function call. Same story, it crashes.
>> >
>> > I've gone line by line now through the Cython code for that function and
>> > I
>> > cant see anything wrong. You have any ideas I could try?
>> >
>> > Thanks!
>> >
>> > Chris
>> >
>> > On Wed, May 27, 2009 at 10:49 AM, Lisandro Dalcin <[email protected]>
>> > wrote:
>> >>
>> >> On Wed, May 27, 2009 at 11:36 AM, Chris Colbert <[email protected]>
>> >> wrote:
>> >> > sometimes the docs are a bit dated. But nonetheless, those constants
>> >> > are
>> >> > just integers defines in the header files and is where I got the
>> >> > values
>> >> > 0-4,
>> >> > I used the integers in the example just to make it a bit more clear.
>> >> > But
>> >> > 0-4
>> >> > are valid constants for the call, as they worked in the pure C
>> >> > example.
>> >>
>> >> Mmm... they I have no idea what's going on... Did you try to run under
>> >> valgrind? That usually works for me...
>> >>
>> >> > What you showed for exposing the constants however, is interesting, I
>> >> > have
>> >> > been just defining the constants as module level python integers so
>> >> > they
>> >> > can
>> >> > be used from python. If defined as an enum as you show, will they
>> >> > be accessible from python?
>> >> >
>> >>
>> >> No, you have to explicitly expose them. If you declared them in some
>> >> pxd, let say "mycvdefs.pxd", you can write in "mycvmodule.pyx"
>> >>
>> >> CV_SOME_CONSTANT = mycvdefs.CV_SOME_CONSTANT
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> > Chris
>> >> >
>> >> > On Wed, May 27, 2009 at 9:40 AM, Lisandro Dalcin <[email protected]>
>> >> > wrote:
>> >> >>
>> >> >> According to the docs,
>> >> >>
>> >> >>
>> >> >>
>> >> >> http://opencv.willowgarage.com/wiki/CvReference#Sampling.2CInterpolationandGeometricalTransforms,
>> >> >> There are 4 possible values (you mention 5). Is that OpenCV
>> >> >> documentation dated? IMHO, you should use them. To expose these
>> >> >> constants in Cython code (likely in some pxd), you can do this:
>> >> >>
>> >> >> cdef extern from ....:
>> >> >>
>> >> >>    enum: CV_INTER_NN
>> >> >>    enum: CV_INTER_LINEAR
>> >> >>    enum: CV_INTER_AREA
>> >> >>    enum: CV_INTER_CUBIC
>> >> >>
>> >> >>
>> >> >>
>> >> >> On Wed, May 27, 2009 at 12:57 AM, Chris Colbert
>> >> >> <[email protected]>
>> >> >> wrote:
>> >> >> > So I'm wrapping the OpenCV library in Cython and its coming along
>> >> >> > quite
>> >> >> > nicely (thanks to everyone here for getting me up to speed!), but
>> >> >> > today
>> >> >> > I've
>> >> >> > run across a strange issue where a wrapped function fails for
>> >> >> > certain
>> >> >> > values
>> >> >> > of integer arguments, but a pure c implementation testing the same
>> >> >> > thing
>> >> >> > with the same arguments works.
>> >> >> > Here is the code excerpts im using:
>> >> >> > #---------- .pyx ------------------#
>> >> >> > def cvResize(cy_cvtypes.CvArr src, cy_cvtypes.CvArr dst,
>> >> >> > interpolation):
>> >> >> >     cdef c_cxcore.CvArr* c_src = src.handle()
>> >> >> >     cdef c_cxcore.CvArr* c_dst = dst.handle()
>> >> >> >     cdef int c_interpolation = interpolation
>> >> >> >     with nogil:
>> >> >> >         c_cv.cvResize(c_src, c_dst, c_interpolation)
>> >> >> > #-------- c_cv.pxd -----------------#
>> >> >> > cdef extern from "cv.h":
>> >> >> >     void cvResize(CvArr* src, CvArr* dst, int interpolation) nogil
>> >> >> >
>> >> >> > #--------- test.py -----------------#
>> >> >> > from cyopencv import *
>> >> >> > if __name__=='__main__':
>> >> >> >     img = cvLoadImage('2.bmp')
>> >> >> >     img2 = cvCreateImage((640, 480), img.depth, img.nChannels)
>> >> >> >     cvResize(img, img2, 3)
>> >> >> >     img2.show()
>> >> >> >
>> >> >> >
>> >> >> > #--------- pureC.c -----------#
>> >> >> > #include "highgui.h"
>> >> >> > #include "cv.h"
>> >> >> > #include "cxcore.h"
>> >> >> > #include "cxtypes.h"
>> >> >> > int main(void)
>> >> >> > {
>> >> >> >     IplImage* img, *img2;
>> >> >> >     img = cvLoadImage("2.bmp", 1);
>> >> >> >     img2 = cvCreateImage(cvSize(640, 480), img->depth,
>> >> >> > img->nChannels);
>> >> >> >     cvResize(img, img2, 3);
>> >> >> >     cvNamedWindow("test", 1);
>> >> >> >     cvShowImage("test", img2);
>> >> >> >     cvWaitKey(0);
>> >> >> >     cvDestroyAllWindows();
>> >> >> >     cvReleaseImage(&img);
>> >> >> >     cvReleaseImage(&img2);
>> >> >> > }
>> >> >> >
>> >> >> >
>> >> >> > valid integers for the argument 'interpolation' are 0, 1, 2, 3, 4
>> >> >> > (as
>> >> >> > tested
>> >> >> > with the C function). My Cython wrapper fails with a Python crash
>> >> >> > for
>> >> >> > integer values 1 & 2.  Values of 0,1,4 work properly and the
>> >> >> > output
>> >> >> > image
>> >> >> > matches the output image of the C test function under the same
>> >> >> > conditions.
>> >> >> > I've looked at the generated Cython code and everything seems in
>> >> >> > order,
>> >> >> > I
>> >> >> > just can't think of what could be causing this behavior.
>> >> >> > Any thoughts?
>> >> >> > Cheers!
>> >> >> > Chris
>> >> >> >
>> >> >> > _______________________________________________
>> >> >> > Cython-dev mailing list
>> >> >> > [email protected]
>> >> >> > http://codespeak.net/mailman/listinfo/cython-dev
>> >> >> >
>> >> >> >
>> >> >>
>> >> >>
>> >> >>
>> >> >> --
>> >> >> Lisandro Dalcín
>> >> >> ---------------
>> >> >> Centro Internacional de Métodos Computacionales en Ingeniería
>> >> >> (CIMEC)
>> >> >> Instituto de Desarrollo Tecnológico para la Industria Química
>> >> >> (INTEC)
>> >> >> Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)
>> >> >> PTLC - Güemes 3450, (3000) Santa Fe, Argentina
>> >> >> Tel/Fax: +54-(0)342-451.1594
>> >> >> _______________________________________________
>> >> >> Cython-dev mailing list
>> >> >> [email protected]
>> >> >> http://codespeak.net/mailman/listinfo/cython-dev
>> >> >
>> >> >
>> >> > _______________________________________________
>> >> > Cython-dev mailing list
>> >> > [email protected]
>> >> > http://codespeak.net/mailman/listinfo/cython-dev
>> >> >
>> >> >
>> >>
>> >>
>> >>
>> >> --
>> >> Lisandro Dalcín
>> >> ---------------
>> >> Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC)
>> >> Instituto de Desarrollo Tecnológico para la Industria Química (INTEC)
>> >> Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)
>> >> PTLC - Güemes 3450, (3000) Santa Fe, Argentina
>> >> Tel/Fax: +54-(0)342-451.1594
>> >> _______________________________________________
>> >> Cython-dev mailing list
>> >> [email protected]
>> >> http://codespeak.net/mailman/listinfo/cython-dev
>> >
>> >
>> > _______________________________________________
>> > Cython-dev mailing list
>> > [email protected]
>> > http://codespeak.net/mailman/listinfo/cython-dev
>> >
>> >
>>
>>
>>
>> --
>> Lisandro Dalcín
>> ---------------
>> Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC)
>> Instituto de Desarrollo Tecnológico para la Industria Química (INTEC)
>> Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)
>> PTLC - Güemes 3450, (3000) Santa Fe, Argentina
>> Tel/Fax: +54-(0)342-451.1594
>> _______________________________________________
>> Cython-dev mailing list
>> [email protected]
>> http://codespeak.net/mailman/listinfo/cython-dev
>
>
> _______________________________________________
> Cython-dev mailing list
> [email protected]
> http://codespeak.net/mailman/listinfo/cython-dev
>
>



-- 
Lisandro Dalcín
---------------
Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC)
Instituto de Desarrollo Tecnológico para la Industria Química (INTEC)
Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)
PTLC - Güemes 3450, (3000) Santa Fe, Argentina
Tel/Fax: +54-(0)342-451.1594
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to