摄像头校准opencv python imshow错误:(-215)大小.宽度>0和大小.高度>0

摄像头校准opencv python imshow错误:(-215)大小.宽度>0和大小.高度>0,python,opencv,camera-calibration,Python,Opencv,Camera Calibration,在我的论文项目中,我需要确定相机的K失真参数。我决定使用python和opencv来做is。所以你可以看到我是一个Python和Opencv的初学者。我使用这个标准代码: import numpy as np import cv2 import glob #termination criteria criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 70, 0.001) #prepare object points

在我的论文项目中,我需要确定相机的K失真参数。我决定使用python和opencv来做is。所以你可以看到我是一个Python和Opencv的初学者。我使用这个标准代码:

import numpy as np
import cv2
import glob


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

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

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

images = glob.glob('C:/tmp/pixelgrootte/*.jpg')
counter = int(x=1)

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, (5,7),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, (5,7), corners2,ret)
        cv2.imshow('img',img)
        cv2.waitKey(500)
        counter += 1
    else:
        print("No corners found on Picture " + str(counter))
        counter += 1


cv2.destroyAllWindows()

#Calibration
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None)
print("Camera Matrix: " + str(mtx))
print("Distortion Factors: " + str(dist))
运行此脚本时,我收到以下错误:

No corners found on Picture 1
Traceback (most recent call last):
  File "C:\Users\Lode\Documents\School\2014-2015\Thesis\Camera\Camera Calibration.py", line 37, in <module>
cv2.imshow('img',img)
error: ..\..\..\..\opencv\modules\highgui\src\window.cpp:261: error: (-215) size.width>0 && size.height>0 in function cv::imshow
于是我决定运行调试器。调试器显示img、imgpoints en corners2为空。那么,在我的情况下,也许函数cornerSubPix不起作用?但我真的不知道为什么这不起作用

这段代码的奇怪之处在于,它在两周前工作正常,但从那以后我重新安装了我的电脑,因为它运行缓慢。现在,我已经安装了当前版本:

Windows 7 professional N 32位

Python 2.7.9

Numpy 1.9.2

Opencv 2.4.11

所以我猜我有一部分软件需要运行这个脚本,但没有安装,但我不知道它是什么

我已经做了一些关于这个主题的研究,但是我在这个论坛上找不到任何适合我的问题的解决方案。这似乎是一个常见的错误,但我不知道是什么原因导致了这个错误


有人能帮我吗?我将非常感激

错误源于这一行:

img = cv2.drawChessboardCorners(img, (5,7), corners2,ret)
根据,cv2.drawChessboardCorners返回None。所以不要重新绑定img

drawChessboardCorners的第一个参数再次是来自文档的目标图像,它将向其中渲染检测到的棋盘角

您链接到的教程适用于opencv 3.x版,如中所述,其中作者遇到了与您相同的问题。
使用opencv 2.3.1.7测试的工作代码,其中提到其版本为$Rev:4557$,在中提供。

非常感谢您的帮助。我现在觉得有点傻,因为这个问题已经得到了回答。不过,谢谢你这么快回复。@Lode,你不可能知道:据我所知,stackoverflow上没有帖子提到这是版本问题。我是在尝试找出正确的方法之后才发现这一点的,因为Python函数通常不会更改传递给它的参数,除非在文档中明确提到。你不必对这个答案投赞成票,而我所链接的另一个可能更值得这样做,但也许你可以考虑点击复选标记来解决你的问题。我现在面临着完全相同的问题。corners2=cv2。CornerSubpixeGray,corners,11,11,-1,-1,标准您的解决方案运行良好,未显示任何错误,但corners2对我来说仍然为空。这没有意义,因为我使用的代码与文档中的代码完全相同。@RakshitKothari,我不确定您的评论是否涉及类似的未解决问题。如果是这样的话,请考虑一个新的问题,并可能提到这个问题,以快速的基础,从谁帮助你解决这个问题。
img = cv2.drawChessboardCorners(img, (5,7), corners2,ret)