【问题标题】:Python OpenCV Camera Calibration cv::imshow errorPython OpenCV 相机校准 cv::imshow 错误
【发布时间】:2016-12-05 15:09:07
【问题描述】:

我正在尝试在 Anaconda 的 Python 2.7 中使用 OpenCV 2.4.11 校准 SJ4000 相机。

但是,我无法运行此处可用的脚本: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 对象。

我该如何解决这个问题?

感谢您的帮助!

【问题讨论】:

  • 检查img可以是None
  • 这与所有 OpenCV 错误一样具有高度描述性,但它基本上意味着它无法通过断言 size.width>0 && size.height>0。即您的图像大小可能为 0x0,或者不存在。
  • @furas - 是的,原来是None,但为什么呢?
  • 之前的img是什么?其实None后面不是img = cv2.imread(fname)吗?
  • drawChessboardCorners 之前检查img 也许问题出在这条线之前的某个地方。我发现 CV 在出现问题时不会引发错误,但它会返回 None - 即。无法从相机获取图像时返回None

标签: python opencv camera camera-calibration


【解决方案1】:

万岁!经过进一步调试,一切都解决了。我怀疑这是版本问题。

我变了

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)

一切都完美无缺!

【讨论】:

  • 现在意识到它不起作用的原因是drawChessboardCorners()直接对图像进行操作,并且不返回任何内容。这也意味着您仍然可以根据需要保存corners2
猜你喜欢
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多