赛派号

opencv相机矫正 opencvsharp 实现校正图像 opencv 相机校准

本文目的在于记录如何使用MATLAB做摄像机标定,并通过opencv进行校正后的显示。

首先关于校正的基本知识通过OpenCV官网的介绍即可简单了解:

http://docs.opencv.org/2.4/doc/tutorials/calib3d/camera_calibration/camera_calibration.html

对于摄像机我们所关心的主要参数为摄像机内参,以及几个畸变系数。上面的连接中后半部分也给了如何标定,然而OpenCV自带的标定程序稍显繁琐。因而在本文中我主推使用MATLAB的工具箱。下面让我们开始标定过程。

标定板

标定的最开始阶段最需要的肯定是标定板。两种方法,直接从opencv官网上能下载到: http://docs.opencv.org/2.4/_downloads/pattern.png

方法二:逼格满满(MATLAB)

J = (checkerboard(300,4,5)>0.5); figure, imshow(J);

opencvsharp 实现校正图像 opencv 相机校准_ide

采集数据

那么有了棋盘格之后自然是需要进行照片了。不多说,直接上程序。按q键即可保存图像,尽量把镜头的各个角度都覆盖好。

opencvsharp 实现校正图像 opencv 相机校准_ide_02

#include "opencv2/opencv.hpp" #include #include using namespace cv; using namespace std; int main() { VideoCapture inputVideo(0); //inputVideo.set(CV_CAP_PROP_FRAME_WIDTH, 320); //inputVideo.set(CV_CAP_PROP_FRAME_HEIGHT, 240); if (!inputVideo.isOpened()) { cout frame; // read if (frame.empty()) break; // check if at end imshow("Camera", frame); char key = waitKey(1); if (key == 27)break; if (key == 'q' || key == 'Q') { imgname = to_string(f++) + ".jpg"; imwrite(imgname, frame); } } cout frame; // read if (frame.empty()) break; // check if at end remap(frame, frameCalibration, map1, map2, INTER_LINEAR); imshow("Origianl", frame); imshow("Calibration", frameCalibration); char key = waitKey(1); if (key == 27 || key == 'q' || key == 'Q')break; } return 0; }

opencvsharp 实现校正图像 opencv 相机校准_ide_02

修复之前和之后的结果对比

opencvsharp 实现校正图像 opencv 相机校准_OpenCV_20

opencvsharp 实现校正图像 opencv 相机校准_OpenCV_21

还有就是之前讨论的为什么选2系数而不是3系数。因为。。。。。。。 下面是三系数的修正结果,惨不忍睹啊

opencvsharp 实现校正图像 opencv 相机校准_ide_22

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lsinopec@gmail.com举报,一经查实,本站将立刻删除。

上一篇 没有了

下一篇没有了