为什么我的程序不能识别棋盘?

2024-04-20 12:30:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用openCV从Python运行一个摄像机校准程序。我用我的电脑相机从XPS 15 9575,以捕捉不同的帧一个经典的黑白棋盘,我打印。出于某种原因,它从不在程序中注册有棋盘。你知道吗

我已经运行这个程序本身和已经产生的图像和它的作品。它只在我试图捕捉新的并立即处理它们时起不到作用。你知道吗

这是代码的开头。它运行以检查是否找到拐角,然后进入下一步。跑步的时候,它永远也过不了这一关。你知道吗

cam = cv2.VideoCapture(0)

cv2.namedWindow("test")

img_counter = 0
imgNames = []
size = (5,5)
while True:
    ret, frame = cam.read()
    gray =  cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imshow("test", gray)
    if not ret:
        break
    k = cv2.waitKey(1)
    if k%256 == 27:
        break
    elif k%256 == 32:
        img_name = "{}.png".format(img_counter)
        imgtemp = cv2.imread(img_name)
        graytemp = cv2.cvtColor(imgtemp,cv2.COLOR_BGR2GRAY)
        ret, corners = cv2.findChessboardCorners(graytemp, size,None)
        print (ret)
        if ret == True:
            print ("good!")
            imgNames.append(img_name)
            cv2.imwrite(img_name, frame)
            img_counter += 1
        else:
            print ("again")

Tags: nametest程序trueimgsize棋盘if
1条回答
网友
1楼 · 发布于 2024-04-20 12:30:26

在上面的代码中,您试图读取一个实际上不存在的图像。请看这些行:

img_name = "{}.png".format(img_counter)
imgtemp = cv2.imread(img_name)

这里,img_name只是一个字符串,它还没有指向图像文件。您可以做一件事,捕获一个帧并将其保存在这里,给它命名img_name,然后尝试通过cv2.imread函数读取它,如下所示:

img_name = "{}.png".format(img_counter)
cv2.imwrite(img_name, frame)       
imgtemp = cv2.imread(img_name)

或者,可以用imgtemp = frame替换imgtemp = cv2.imread(img_name)。在这种情况下,不必保存然后处理帧。这里,一旦按下spacebar,就对当前捕获的视频帧进行处理而不保存它。你知道吗

不要忘记在代码末尾添加以下行:

cam.release()
cv2.destroyAllWindows()

相关问题 更多 >