在python中是否有一种方法可以在列表中调用过滤器,其中过滤函数在调用期间绑定了许多参数.例如,有没有办法做这样的事情:
>> def foo(a,b,c):
return a < b and b < c
>> myList = (1,2,3,4,5,6)
>> filter(foo(a=1,c=4),myList)
>> (2,3)
Run Code Online (Sandbox Code Playgroud)
这就是说有没有办法调用foo使a = 1,c = 4,并且b绑定到myList中的值?
我有一个计算机视觉算法我想用scipy.optimize.minimize调整.现在我只想调整两个参数,但参数的数量可能最终增长所以我想使用一种可以进行高维渐变搜索的技术.SciPy中的Nelder-Mead实现似乎非常合适.
我得到了所有设置的代码,但似乎最小化函数确实想要使用步长大于1的浮点值.当前参数集都是整数,其中一个步长为1和另一个步长为2(即该值必须为奇数,如果不是我想要优化的东西将其转换为奇数).大致一个参数是以像素为单位的窗口大小,另一个参数是阈值(从0到255的值).
为了它的价值,我正在使用git repo中的scipy.有谁知道如何告诉scipy为每个参数使用特定的步长?有什么方法可以滚动我自己的渐变功能吗?是否有可以帮助我的scipy旗帜?我知道这可以通过简单的参数扫描完成,但我最终希望将此代码应用于更大的参数集.
代码本身很简单:
import numpy as np
from scipy.optimize import minimize
from ScannerUtil import straightenImg
import bson
def doSingleIteration(parameters):
# do some machine vision magic
# return the difference between my value and the truth value
parameters = np.array([11,10])
res = minimize( doSingleIteration, parameters, method='Nelder-Mead',options={'xtol': 1e-2, 'disp': True,'ftol':1.0,}) #not sure if these params do anything
print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
print res
Run Code Online (Sandbox Code Playgroud)
这就是我的输出的样子.正如你所看到的那样,我们正在重复大量的运行并且没有在最小化中获得任何结果.
*+++++++++++++++++++++++++++++++++++++++++
[ 11. 10.] <-- Output from scipy minimize
{'block_size': 11, 'degree': 10} <-- input to …Run Code Online (Sandbox Code Playgroud) 我一直试图通过Python绑定使用抓取方法的OpenCV实现.我已尝试在cv和cv2中使用该版本,但我找不到用于使方法正确运行的正确参数.我已经尝试了几个参数的排列,似乎没有任何工作(基本上我在Github上看到的每个例子).以下是我尝试遵循的几个示例:
这是方法的文档和已知的错误报告:
我可以使用下面的示例获取代码,但它返回一个空白(全黑)图像蒙版.
img = Image("pills.png")
mask = img.getEmpty(1)
bgModel = cv.CreateMat(1, 13*5, cv.CV_64FC1)
fgModel = cv.CreateMat(1, 13*5, cv.CV_64FC1)
for i in range(0, 13*5):
cv.SetReal2D(fgModel, 0, i, 0)
cv.SetReal2D(bgModel, 0, i, 0)
rect = (150,70,170,220)
tmp1 = np.zeros((1, 13 * 5))
tmp2 = np.zeros((1, 13 * 5))
cv.GrabCut(img.getBitmap(),mask,rect,tmp1,tmp2,5,cv.GC_INIT_WITH_RECT)
Run Code Online (Sandbox Code Playgroud)
我正在使用SimpleCV来加载图像.img.getBitmap()的掩码类型和返回类型是:
iplimage(nChannels=1 width=730 height=530 widthStep=732 )
iplimage(nChannels=3 width=730 height=530 widthStep=2192 )
Run Code Online (Sandbox Code Playgroud)
如果有人有这个代码的工作示例,我很乐意看到它.值得一提的是,我在OSX Snow Leopard上运行,而我的OpenCV版本是从SVN存储库安装的(截至几周前).作为参考我的输入图像是这样的:

我已经尝试将结果掩码枚举值更改为更明显的值.返回值不是问题所在.这将返回一个完全黑色的图像.我会尝试更多的价值观.
img = Image("pills.png")
mask = img.getEmpty(1)
bgModel = cv.CreateMat(1, 13*5, cv.CV_64FC1)
fgModel …Run Code Online (Sandbox Code Playgroud) 我已经梳理了网络,寻找一种方法来获取OpenCV 2.3.1a特征提取/描述符绑定,以吐出任何风格的图像特征/描述符(STAR/SURF/ORB/SIFT/FAST).我很清楚OpenCV有一个名为"goodFeaturesToTrack的方法.这对我没有帮助,因为没有功能描述符(这是我真正需要的).我已按照此处列出的文档:
http://opencv.itseez.com/modules/features2d/doc/feature_detection_and_description.html
似乎没什么用.我已经尝试了所有描述符/功能的风格.我尝试使用单通道和多通道图像(即彩色和黑白)和多种图像格式(8位和32位).我使用了当前的发行版并从源代码库中构建了绑定.大多数方法导致"unknown not a numpy array"错误.这是一个例子:
SimpleCV:1>import cv2
SimpleCV:2>img = Image("aerospace.jpg")
SimpleCV:3>bwimg = img._getGrayscaleBitmap()
SimpleCV:4>bwimg
SimpleCV:4><iplimage(nChannels=1 width=600 height=400 widthStep=600 )>
SimpleCV:5>surfer = cv2.SURF(0.5,4,2,False,False)
SimpleCV:6>points = surfer.detect(bwimg,None)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/Library/Python/2.6/site-packages/SimpleCV-1.2-py2.6.egg/SimpleCV/Shell/Shell.pyc in <module>()
-
TypeError: <unknown> is not a numpy array
SimpleCV:7>
Run Code Online (Sandbox Code Playgroud)
值得注意的是,我使用SimpleCV加载图像,但方法_getGrayscaleBitmap()返回OpenCV使用的灰色8位IPL图像.我确信这是有效的,因为我使用它与其他数百种OpenCV方法无关.
所以任何人都可以指向我在网络上的这个代码的工作示例.我已经梳理了几十个例子,发现没有任何效果.