Tag: python

SWIG将C库连接到Python(从C’序列’结构创建’可迭代’Python数据类型)

我为C库编写了一个Python扩展。 我有一个如下所示的数据结构: typedef struct _mystruct{ double * clientdata; size_t len; } MyStruct; 此数据类型的目的直接映射到Python中的列表数据类型。 因此,我想为导出的结构创建“类似列表”的行为,因此使用我的C扩展编写的代码更像是“Pythonic”。 特别是,这是我想要做的(来自python代码)注意:py_ctsruct是在python中访问的ctsruct数据类型。 我的要求可以归结为: list(py_ctsruct)返回一个python列表,其中包含从c结构中复制的所有内容 py_cstruct [i]返回ith元素(最好在无效索引上抛出IndexError) 对于py_ctsruct中的elem:枚举的能力 根据PEP234 , 如果一个对象实现_ iter _()或_ getitem _() , 则可以使用“for”进行迭代 。 然后使用该逻辑,我认为通过将以下属性(通过重命名 )添加到我的SWIG接口文件,我将具有所需的行为(除了上面的请求#1 – 我仍然不知道如何实现): __len__ __getitem__ __setitem__ 我现在能够在python中索引C对象。 我还没有实现Pythonexception抛出,但是如果超出数组边界,则返回一个幻数(错误代码)。 有趣的是,当我尝试使用’for x in’语法迭代结构时,例如: for i in py_cstruct: print i Python进入一个无限循环,只需在控制台上打印上面提到的魔术(错误)编号。 这告诉我索引有问题。 最后但并非最不重要,我如何实施要求1? 这涉及(据我了解): 从python处理’函数调用列表() 从C代码返回Python(列表)数据类型 [[更新]] […]

为什么这个ctypes代码不能与Python 3.3一起使用,但是可以与Python 2.7一起使用?

所以我正在尝试使用ctypes模块创建一个Python 3.3程序来更改Windows桌面背景。 我在Python 2.7中测试了以下代码,它运行得很好。 但它只适用于Python 3.3! 我正在使用Windows 7.这是代码: import ctypes SPI_SETDESKTOPWALLPAPER=20 ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKTOPWALLPAPER, 0,”C:/Users/Public/Pictures/Sample Pictures/Penguins.jpg”, 3)

如何在高海拔照片中有效地找到地平线?

我试图检测从高空拍摄的图像中的地平线,以确定相机的方向。 我也试图快速运行 – 理想情况下,我希望能够在Raspberry Pi上实时处理帧(即每秒几帧)。 到目前为止我采取的方法是基于这样一个事实:在高海拔地区,天空非常暗,如下: 我试过的是从整个图像中取样并将它们分成浅色和深色样本,并在它们之间画一条线。 然而,由于大气层的模糊性,这将地平线置于其实际位置之上: 这是我的代码(在Javascript中为了便于网络演示): function mag(arr) { return Math.sqrt(arr[0]*arr[0]+arr[1]*arr[1]+arr[2]*arr[2]) } // return (a, b) that minimize // sum_i r_i * (a*x_i+b – y_i)^2 function linear_regression( xy ) { var i, x, y, sumx=0, sumy=0, sumx2=0, sumy2=0, sumxy=0, sumr=0, a, b; for(i=0;i<xy.length;i++) { x = xy[i][0]; y = xy[i][2]; r = […]