opencv
ulimate_
To iterate is human, to recurse divine
展开
-
aruco码DICT几乘几是啥含义,aruco.getPredefinedDictionary
DICT_5X5_100表示该字典使用5x5像素的marker,一共有100个不同ID的marker。所以当我们使用aruco.getPredefinedDictionary(aruco.DICT_5X5_100)时,就是获取一个包含100个ID,且每个marker大小为5x5像素的预定义字典。- DICT_5X5_1000: 5x5像素,1000个markers通过指定不同的字典,我们可以生成和检测不同大小和数量的ArUco marker。- 5X5:表示ArUco标记是5x5像素大小的正方形格子组成。原创 2023-09-13 09:15:17 · 688 阅读 · 1 评论 -
cv2.calibrateCamera函数
这个函数里的obj_points和img_points是同一相机不同视角下20张图片的角点,那这个函数返回的旋转向量r_vecs和位置矢量t_vecs是指什么,因为20张图像,棋盘格码的位置都不一样,它这个返回的旋转向量和位置矢量是指哪一张图?- t_vecs: 是一个位移向量数组,长度也是图片张数,表示每张图片相机光心相对于第一个画面的位置变换。- mtx: 是相机的内参矩阵,针对所有的图片通用。这个函数会利用所有的点对进行相机标定,返回的标定结果适用于所有的图片,而不是仅针对单张图片。原创 2023-09-12 14:49:07 · 1018 阅读 · 0 评论 -
同一个相机拍的不同图片的畸变系数是不是都不同,但相机内参矩阵是相同的
所以通常我们可以认为,同一台相机不同图片的内参矩阵相同,畸变系数虽会存在误差但可以看作相等。3. 但是在标定过程中,由于自变量条件和噪声的影响,计算出的畸变系数会存在误差,不同图片标定结果也会有细微波动。对同一台相机拍摄的不同图片,相机内参矩阵应该是相同的,而畸变系数可能存在一定差异,但通常也是相近的。1. 相机内参矩阵代表了相机的几何特性,包括焦距、主点坐标等,这些参数是固有的,不会因拍摄不同图片而改变。4. 但只要标定条件充分,这种波动应该很小,可以视为相同相机的畸变参数相等。原创 2023-09-11 20:55:21 · 271 阅读 · 0 评论 -
cv2.getOptimalNewCameraMatrix和cv2.calibrateCamera都能获得相机的内参矩阵,哪一个才是我应该用来作为aruco.estimatePoseSingleMar
所以正确的方法是:使用cv2.calibrateCamera()估计得到的原始内参矩阵作为aruco.estimatePoseSingleMarkers()函数的内参矩阵参数,才能进行正确的姿态估计。在使用aruco标记进行姿态估计时,应该使用cv2.calibrateCamera()得到的原始内参矩阵,而不是cv2.getOptimalNewCameraMatrix()去畸变后的内参矩阵。4. 一般流程是先检测标记获取2D坐标,然后使用原内参矩阵计算标记在相机坐标系中的3D坐标来恢复姿态。原创 2023-09-11 19:44:36 · 532 阅读 · 0 评论 -
关于cv2.solvePnP和cv2.solveP3P
需要注意的是,这两个函数的输入参数相似,都需要已知的三维坐标点和对应的二维坐标点,以及相机的内参和畸变系数。函数是 OpenCV 中的一种用于计算相机位姿的函数。它可以根据一组已知的二维坐标点和对应的三维坐标点,以及相机的内参和畸变系数,计算出相机的位姿(旋转和平移向量)。函数计算相机的位姿,并将结果输出到控制台。在上述示例中,我们定义了一组已知的三维坐标点和对应的二维坐标点,以及相机的内参和畸变系数。是OpenCV中的两个用于计算相机位姿的函数,它们的主要区别在于使用的场景和计算的方法不同。原创 2023-07-04 19:35:21 · 2198 阅读 · 3 评论 -
关于opencv中cv2.imread函数读取的图像shape问题
但opencv读出来的数组却正好相反,是(h,w,3),(y,x,3)图像坐标系是(w,h),w为x轴,h为y轴,(x,y)实则转换为图像坐标系时,要转置一下。所以这里会有一个转换。原创 2023-07-03 15:06:03 · 3324 阅读 · 0 评论