1

我在使用 OpenCV python 包装器执行以下函数时遇到问题:

img = cv.LoadImage("calib0.jpg")
grayImg = cv.CreateImage((img.width,img.height), img.depth,1)
cv.CvtColor(img,grayImg,cv.CV_BGR2GRAY)
corners = cv.FindChessboardCorners(grayImg,(5,6), cv.CALIB_CB_ADAPTIVE_THRESH + cv.CALIB_CB_NORMALIZE_IMAGE + cv.CALIB_CB_FAST_CHECK )
cv.cornerSubPix(grayImg,corners,(11,11),(-1,-1),(cv.CV_TERMCRIT_ITER | cv.CV_TERMCRIT_EPS, 10, 0.01))

如果我在(OSX)上的 iPython 中运行它,我会收到以下错误:


TypeError Traceback(最近一次通话最后)/Users/katherinescott/simplecv-git/SimpleCV/sampleimages/ in () ----> 1 cv.cornerSubPix(grayImg,corners,(11,11),(-1,-1 ),(cv.CV_TERMCRIT_ITER | cv.CV_TERMCRIT_EPS, 10, 0.01))

TypeError:不是一个numpy数组

我已经尝试了将上述对象转换为 numpy ndarray 的几乎所有排列,但无济于事。我的猜测是这个错误存在于术语标准对象中,但我不知道它要求什么。尝试使用 OpenCV Python 包装器执行校准时,有没有其他人遇到过这个问题?我即将开始挖掘源代码,看看我能找到什么。

4

2 回答 2

0

cornerSubPix,前面有一个小写字母,是 OpenCV python 包装器的模块内部函数。

我相信你想要 cv.FindCornerSubPix:

http://opencv.willowgarage.com/documentation/python/imgproc_feature_detection.html#findcornersubpix

于 2011-06-06T21:17:19.097 回答
0

winSize老问题,但我相信 . 中的参数可能存在一些误解cv.cornerSubPix()

使用时

cv.cornerSubPix(grayImg, corners, winSize, (-1,-1), criteria)

假设您想要一个 11x11 的搜索窗口,则应输入的适当输入为winSizeshouldwinSize=(5,5)和 not winSize=(11,11)。如果您使用winSize原始问题中发布的 (11,11) ,则生成的搜索窗口实际上是 23x23。

根据文档:

winSize:搜索窗口边长的一半。例如,如果 winSize=Size(5,5) ,则使用 (5∗2+1)×(5∗2+1)=11×11 搜索窗口。

从 OpenCV 4.5.2(2021 年 4 月)开始,相关文档中的示例cv.findChessboardCorners()似乎不正确,应改用 (5,5) for winSize。

于 2021-04-03T22:28:46.960 回答