0准备标定版
F:\dongdong\0tool\MATLAB\help\toolbox\vision\examples
matlab自动准备了一个pdf标定版打印出来,注意
1采集相机标定图像
采集代码
python 运行后,2秒自动抓拍存在save文件夹下面
自己拍摄不同的角度
import cv2 import datetime #二维码动态识别 ImgW=640 ImgH=480 camera=cv2.VideoCapture(0) camera.set(3,ImgW) #设置分辨率 camera.set(4,ImgH) i=0 cv2.namedWindow(\'frame\',0) start = datetime.datetime.now() while True: (grabbed,frame)=camera.read() #获取画面中心点 h1,w1= frame.shape[0],frame.shape[1] cv2.imshow(\'frame\',frame) key=cv2.waitKey(1) if key & 0xFF == ord(\'s\'): # 按q保存一张图片 i=i+1 name="./save/frame"+str(i)+".jpg" cv2.imwrite(name, frame) elif key==ord(\'q\'): break end = datetime.datetime.now() timejiange=int(str((end-start).seconds)) if timejiange>2: i=i+1 name="./save/frame"+str(i)+".jpg" cv2.imwrite(name, frame) start = datetime.datetime.now() print("保存",i) camera.release() cv2.destroyAllWindows()
2开始标定
得到一组图像,打开matlab开始标定
-
应用程序下找到Camera Calibration工具箱
-
加载待标定的图像,这里选择2coefficients计算经向畸变更稳
-
-
填写棋盘格每个格子边长的真实值 实验室的标定板 20mm 毫米
-
可以预览成功检测出棋盘格的图像,然后开始标定,点击Calibrate
-
-
平均误差小于0.5即可,超过的鼠标点击对应的柱状,删除键
-
-
-
导出相机标定参数
-
在matlab工作空间里可以看到相机参数的属性
-
相机的内参矩阵
-
径向畸变和切向畸变。 -
谷壳USB相机标定结果
相机内参 3*3一共9个
831.514230246688 0 0
0 831.972596866759 0
327.324903206150 262.347092547845 1
真实使用需要转置沿着对角线翻上去
畸变参数
径向畸变Radial distortion 径向畸变3个(k1,k2,k3)
(我们选择的是两个参数 k3认为0)
0.195387502976378 -1.36446754085673
切向畸变tangentialdistortion 2个(p1,p2)
0 0
使用的时候
OpenCV中的畸变系数的排列(这点一定要注意k1,k2,p1,p2,k3),千万不要以为k是连着的。
代码调用
#相机内参 matlab标定出来的结果 不能直接用,需要沿着对角线翻转 fx = 831.514230246688 fy = 831.972596866759 cx = 327.324903206150 cy = 262.347092547845 K = np.array([[fx, 0., cx], [0., fy, cy], [0., 0., 1.0]]) #畸变系数k1 k2 pq p2 k3 dist=np.array(([[0.195387502976378 ,-1.36446754085673, 0 ,0 ,0]]))
xml保存替换数据
<?xml version="1.0" encoding="utf-8"?> <opencv_storage> <camera-matrix type_id="opencv-matrix"> <rows>3</rows> <cols>3</cols> <dt>d</dt> <data>3099.7082447931371000 0.0000000000000000 1077.7535540640906000 0.0000000000000000 3086.4434775466948000 1826.5450377846478000 0.0000000000000000 0.0000000000000000 1.0000000000000000 </data> </camera-matrix> <distortion type_id="opencv-matrix"> <rows>5</rows> <cols>1</cols> <dt>d</dt> <data>-0.0890744873306951 5.1317176243308209 -0.0051019418392772 -0.0021081150992697 -39.0645994879151530 </data> </distortion> </opencv_storage>