`本次申请BPI M64用于图像处理项目,所以这个项目有两个重要的功能要实现:
1.opencv源码的方式在M64上安装,开始本来想使用的是opencv3.0,但是实际项目依赖了opencv2.4.9,所以在前面一个一帖子中已经向大家分享了整个源码的编译安装过程,具体请参考:
https://bbs.elecfans.com/forum.ph ... &tid=1128225&extra=
2.基于opencv的相机标定:
为了实际项目中使用相机用于尺寸测量,普通相机的畸变一般都是比较大的,特别是中心区域,所以在使用前需要对相机进行畸变校正,测量出相机的内参,完成对相机的标定。
我使用OpenCV的例程来进行标定,在opencv目录下 sourcessamplescpp utorial_codecalib3dcamera_calibration
有3个文件 : camera_calibration.cpp
VID5.xml
in_VID5.xml
第一个是标定程序的源代码。
第二个是配置文件,你可以更改标定图片获取的方式以及标定板的一些参数。
第三个里面可以修改标定图片序列的文件名。 前提准备:
棋盘个标定板,这张棋盘个的尺寸为9×6格: 接下来就可以开始了…… 使用相机保存拍摄的棋盘个图,相机拍摄的代码如下:
- #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 << "Could not open the input video " << endl;
- return -1;
- }
- Mat frame;
- string imgname;
- int f = 1;
- while (1) //Show the image captured in the window and repeat
- {
- inputVideo >> 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 << "Finished writing" << endl;
- return 0;
- }
复制代码
我们这里只介绍从摄像头获取标定图片的方式。其他方式可以按照说明更改VID5.xml自行实现。 第一步,新建一个工程,将camera_calibration.cpp文件的源码拷贝进去。
第二步,将VID5.xml拷贝到工程目录下面。
第三步,编辑in_VID5.xml,将Input标签里的内容改为VID5.xml文件实际存放的位置,我之间将次文件保存和项目工程在同一个目录下,所以我的in_VID5.xml如下。 第四步,编译并运行程序。 “
下面是我的VID5.xml文件 9 6 50 "CHESSBOARD" "VID5.xml" 0 100 25 1 1 1 "out_camera_data.xml" 1 1 1 编译执行。/camera_calibration in_VID5.xml |