在cython中将numpy数组传递给C函数

2024-09-27 04:19:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Cython包装了一个第三方相机库接口,这样我就可以从python程序调用它了。大多数情况下,一切都很好,但是我在acquireImage()函数中遇到了一个问题。我尝试创建一个连续的numpy数组,将其传递给库,并在库完成填充后获取结果。最后,我想复制这个数组,重塑它并返回它。(整形的东西还没有编码)

这是我的代码:

在cpixis.pxd公司公司名称:

ctypedef bint rs_bool
ctypedef unsigned short uns16
ctypedef short int16
ctypedef unsigned int uns32
ctypedef unsigned int* uns32_ptr
ctypedef void* void_ptr
ctypedef char* char_ptr
ctypedef short* int16_ptr
ctypedef struct rgn_type:
        short s1
        short s2
        short sbin
        short p1
        short p2
        short pbin
ctypedef rgn_type* rgn_const_ptr
ctypedef rgn_type* rgn_ptr

#cdef CAM_NAME_LEN 32

cdef extern from "/usr/local/pvcam/examples/pvcam.h":
    cdef enum cam_open:
        OPEN_EXCLUSIVE
    cdef enum exposure:
        TIMED_MODE, STROBED_MODE, BULB_MODE, TRIGGER_FIRST_MODE, FLASH_MODE, VARIABLE_TIMED_MODE, INT_STROBE_MODE
    cdef enum readout:
        READOUT_NOT_ACTIVE, EXPOSURE_IN_PROGRESS, READOUT_IN_PROGRESS, READOUT_COMPLETE, 
        FRAME_AVAILABLE = READOUT_COMPLETE, READOUT_FAILED, ACQUISITION_IN_PROGRESS, MAX_CAMERA_STATUS
    rs_bool pl_pvcam_init()
    rs_bool pl_pvcam_uninit()
    rs_bool pl_cam_get_name(int16 cam_num, char_ptr camera_name)
    rs_bool pl_cam_open(char_ptr camera_name, int16_ptr hcam, int16 o_mode)
    rs_bool pl_cam_close(int16 hcam)
    rs_bool pl_pvcam_uninit()
    rs_bool pl_exp_init_seq()
    rs_bool pl_exp_setup_seq (int16 hcam, uns16 exp_total,
                              uns16 rgn_total, rgn_const_ptr rgn_array,
                              int16 exp_mode, uns32 exposure_time,
                              uns32_ptr exp_bytes)
    rs_bool pl_exp_start_seq (int16 hcam, void_ptr pixel_stream)
    rs_bool pl_exp_check_status (int16 hcam, int16_ptr status, uns32_ptr bytes_arrived)
    int16 pl_error_code()
    rs_bool pl_exp_finish_seq (int16 hcam, void_ptr pixel_stream, int16 hbuf)
    rs_bool pl_exp_uninit_seq ()

在皮克斯.pyx公司名称:

^{pr2}$

第64行和66行有相同的错误,即“无法获取Python变量的地址。”我一直在研究另一个类似的问题here。在

有没有一种方法可以解决这个问题,或者我应该用不同的方式来处理这个问题?在

谢谢!在


Tags: modehcamboolshortplrscamcdef
1条回答
网友
1楼 · 发布于 2024-09-27 04:19:20

在acquireImage()函数中,我使用了正确的思想,但是忘记从self.u帧引用中删除“self”。我刚开始时将_frame声明为非局部变量,但当我将其移动到局部范围时,忘记了更新函数中的引用。我去掉了多余的自我,问题就解决了。在

相关问题 更多 >

    热门问题