爱吃雪饼的玛卡巴卡 2022-05-26 13:46 采纳率: 51.9%
浏览 711
已结题

win10下使用python相机标定总是报错

在用摄像头采集了相机张片后进行标定时,cv2.calibrateCamera这个API总是报错,求原因和解决方法

img

img

  • 写回答

13条回答 默认 最新

  • hyh123a 全栈领域新星创作者 2022-05-26 15:05
    关注
    获得6.30元问题酬金

    原因
    1、该错误表示作为参数提供的向量之一为空。
    如果不是所有条件都满足,该函数有一个断言阻止您使用它。这次它检查是否有足够的图像点(nimages > 0必须为真)。

    2、发生错误是因为您没有足够的图像点。由于以下原因:

    该算法循环遍历您的每一张图像,但无法检测到棋盘(否则您会看到消息“检测到棋盘!”)。
    由于它无法检测到棋盘,因此 img_points 数组保持为空并按原样发送到 calibrateCamera 函数。calibrateCamera 函数有一个内部断言,如果没有图像点,您将无法使用它。

    解决方法

    1、查看图片路径是否正确

    2、拍摄更多或更好的照片。
    可以查看有的教程中的第 3 步:https ://medium.com/@omar.ps16/stereo-3d-reconstruction-with-opencv-using-an-iphone-camera-part-ii-77754b58bfe0

    或者您可以查看此资源:http ://aishack.in/tutorials/calibrating-undistorting-opencv-oh-yeah/

    无论如何,问题很可能出在您拍摄照片的方式上,而不是代码本身。

    另外
    作为一般经验法则:

    • 确保您选择的棋盘图案有足够大的正方形。并且这些正方形之间有明显的区别。
    • 确保棋盘图案具有纯色背景(即背景中没有纹理),最好是白色。
    • 确保您的棋盘图案在您放置的表面上完全平坦(纸上的裂缝或其他人工制品可能会影响准确性)。
    • 确保从不同的角度和角度拍摄照片。(不要偏向一侧,确保从各个方面拍照)。

    参考:

    除此之外
    另外一件事,您应该在进行校准之前检查它们是否有点,
    例如添加以下代码:

    if len(objpoints) == len(imgpoints) and len(objpoints) > 0:
        ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None)
    else:
        print("not enough points to calibrate")
    

    如有问题及时沟通

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月3日
  • 修改了问题 5月26日
  • 创建了问题 5月26日

悬赏问题

  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 如何提取csv文件中需要的列,将其整合为一篇完整文档,并进行jieba分词(语言-python)
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置