原因
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")
如有问题及时沟通
从报错来说,是nimage<=0 了,怀疑是因为图片读取序列问题,这一般又是因为路径问题,扩展名问题,注意区分大小写(而windows下图片扩展名可能不一定全部是小写的)。
其实涉及这个问题的主要可能就是:
原因:
1. 图片路径问题,没有指向包含棋盘格的图片
2. 图片中不包含棋盘格或者图片模糊等问题,导致查找棋盘格角点失败
对应解决方法:
1.仔细检查图片路径和棋盘格图片是否对应
2.检查棋盘格图片是否模糊,可以写个小工具程序显示找到角点的位置,如果发现图片有问题没有找到角点,就需要重新拍摄
额外的,关于棋盘格清晰的要求(建议)是:
棋盘图案有足够大,要求正方形,且这些正方形之间有明显的颜色区别。
棋盘图案是纯色背景(最后没有没有(明显)纹理),最好的是白色,
图案要平整、完整,即图案平面这个没有起伏,和镜头平面成稳定角度
nimages≤0了
ROS kinetic 下单目摄像机的标定
https://cloud.tencent.com/developer/article/1526524
代码应该是没有问题的,那问题就可能出在图片上,我看你代码中识别角点以后有画角点连线,你可以把cv2.waitKey的时间加长,或者直接改为0,查看每张图片角点识别结果,可能有识别失败的,详细的可以参考我这个帖子
https://blog.csdn.net/aibingjin/article/details/123942268
原因:
① 图片路径问题,没有指向包含棋盘格的图片
② 图片中不包含棋盘格或者图片模糊等问题,导致查找棋盘格角点失败
解决方法:
① 仔细检查图片路径和棋盘格图片是否对应
② 检查棋盘格图片是否模糊,可以写个小tool显示找到角点的位置,如果发现图片有问题没有找到角点,就重新拍摄
原因:1、 图片路径问题,没有指向包含棋盘格的图片
2、图片中不包含棋盘格或者图片模糊等问题,导致查找棋盘角点失败
解决方法:
1、仔细检查图片路径和棋盘格图片是否对应
2、检查棋盘格图片是否模糊,可以写个小tool显示找到角点的位置,如果发现图片有问题没有找到角点,就重新拍摄
一方面可能是图片质量的原因,一方面可能是opencv找棋盘格角点的功能不是太稳健,希望对你有帮助
正确调用方法
import cv2
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
frame = cv2.flip(
frame,
1 # 1:水平镜像,-1:垂直镜像
)
cv2.imshow('frame', frame)
# 这一步必须有,否则图像无法显示
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 当一切完成时,释放捕获
cap.release()
cv2.destroyAllWindows()
同问
一共三个博文,看完想一想,不行就请教同事或指导老师,上面回答的描述跟这几个参考差不多,还是要多多想想:https://blog.csdn.net/stq054188/article/details/105674740
https://blog.csdn.net/thomson617/article/details/103472374
https://www.shangmayuan.com/a/898f5e61e4aa4dc5a361d49d.html
同求
楼上这几篇文章值得一看,我也看了一下,感觉挺好的
建议自已先找一找相关资料,百度很香的,多找一找说不定就有灵感了。
https://blog.csdn.net/stq054188/article/details/105674740
https://blog.csdn.net/thomson617/article/details/103472374
https://www.shangmayuan.com/a/898f5e61e4aa4dc5a361d49d.html
原因的话像一下这些都可能是
1、该错误表示作为参数提供的向量之一为空。
如果不是所有条件都满足,该函数有一个断言阻止您使用它。这次它检查是否有足够的图像点(nimages > 0必须为真)。
2、发生错误是因为您没有足够的图像点。由于以下原因:
该算法循环遍历您的每一张图像,但无法检测到棋盘(否则您会看到消息“检测到棋盘!”)。
由于它无法检测到棋盘,因此 img_points 数组保持为空并按原样发送到 calibrateCamera 函数。calibrateCamera 函数有一个内部断言,如果没有图像点,您将无法使用它。
检查下有没有操作的权限