2015-10-14 93 views
2

cv2.cornerSubPix()函数返回None值。cv2.cornerSubPix()函数返回None值

我正式使用opencv教程。现在我在相机校准主题。

以下是我的代码: -

import numpy as np 
import cv2 
import glob 

# termination criteria 
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) 

# prepare object points, like (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0) 
objp = np.zeros((6*7,3), np.float32) 
objp[:,:2] = np.mgrid[0:7,0:6].T.reshape(-1,2) 

# Arrays to store object points and image points from all the images. 
objpoints = [] # 3d point in real world space 
imgpoints = [] # 2d points in image plane. 

images = glob.glob('*.jpg') 

for fname in images: 
    img = cv2.imread(fname) 
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 

    # Find the chess board corners 
    ret, corners = cv2.findChessboardCorners(gray, (7,6),None) 

    # If found, add object points, image points (after refining them) 
    if ret == True: 
     objpoints.append(objp) 

     corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria) 
     imgpoints.append(corners2) 

     # Draw and display the corners 
     img = cv2.drawChessboardCorners(img, (7,6), corners2,ret) 
     cv2.imshow('img',img) 
     cv2.waitKey(500) 

cv2.destroyAllWindows() 

corners2具有在下面的行值无:

corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria) 

由于此线cv2.imshow的()也呈现出错误。

灰色,角落和标准有一定的价值。

+0

击中了同样的问题,任何想法? –

回答

2

我有同样的问题,它证明了示例教程代码和我正在运行的由PythonXY安装的版本之间的版本问题。

如果你的问题是角2和img值都被None填充,那么这是因为你正在使用的OpenCV版本是为了使用这些命令来更新输入,而不是重新定义输入。

解决方法是简单的,改变从以下两行:

corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria) 
img = cv2.drawChessboardCorners(img, (7,6), corners2,ret)` 

到:

cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria) 
cv2.drawChessboardCorners(img, (7,6), corners ,ret)