2016-12-05 130 views
0

我想在Anaconda的Python 2.7中使用OpenCV 2.4.11校准SJ4000摄像机。Python OpenCV摄像机校准cv :: imshow error

但是,我不能运行该脚本可以在这里找到:http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_calib3d/py_calibration/py_calibration.html#setup

我即使在samples/cpp/可用的样本图像,图像left01.jpg to left14.jpg测试它。它能够检测到图像中的棋盘,但一旦它击中这一行:

cv2.imshow('img',img) 

它抛出一个错误:

error: ..\..\..\modules\highgui\src\window.cpp:261: error: (-215) size.width>0 && size.height>0 in function cv::imshow 

编辑1:进一步调试后,我发现img = cv2.drawChessboardCorners(img, (7,6), corners2,ret)结果在一个None对象中。

我该如何解决这个问题?

感谢您的帮助!

+0

检查'img'它可以'None' – furas

+0

这与所有OpenCV错误一样具有高度描述性,但它基本上意味着它无法断言'size.width> 0 && size.height> 0'。即您的图片大小可能为0x0,或者不存在。 – Iluvatar

+0

@furas - 是的,它变成了'没有',但为什么? –

回答

2

Hooray!经过一些进一步的调试后,所有解决。我怀疑这是一个版本问题。

我改变

corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria) 
imgpoints.append(corners2) 
# Draw and display the corners 
img1 = cv2.drawChessboardCorners(img, (7,6), corners2,ret) 

cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria) 
# Draw and display the corners 
cv2.drawChessboardCorners(img, (7,6), corners,ret) 

所有的一切都完美的作品!

+0

现在认识到它不起作用的原因是'drawChessboardCorners()'直接对图像进行操作,并且不返回任何东西。这也意味着如果你愿意,你仍然可以保存'corners2'。 – Iluvatar