-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcameraCalibrationGetIntrinsicMatrix.cpp
More file actions
86 lines (64 loc) · 2.3 KB
/
cameraCalibrationGetIntrinsicMatrix.cpp
File metadata and controls
86 lines (64 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//
// cameraCalibrationGetIntrinsicMatrix.cpp
// ObjectDetectionSwift
//
// Created by Maitham Dib on 04/03/2016.
// Copyright © 2016 HelloOpenCV. All rights reserved.
//
#include "cameraCalibrationGetIntrinsicMatrix.hpp"
using namespace cv;
using namespace std;
Mat getInstrinsicMatrix(Mat image)
{
int numBoards = 1;
int numCornersHor =9;
int numCornersVer=6;
int numSquares = numCornersHor * numCornersVer;
cv::Size board_sz = cv::Size(numCornersHor, numCornersVer);
std::vector<std::vector<cv::Point3f>> object_points;
std::vector<std::vector<cv::Point2f>> image_points;
std::vector<cv::Point2f> corners;
int successes=0;
Mat gray_image;
std::vector<cv::Point3f> obj;
for(int j=0;j<numSquares;j++){
obj.push_back(Point3f(j/numCornersHor, j%numCornersHor, 0.0f));
}
while(successes<numBoards)
{
cvtColor(image, gray_image, CV_BGR2GRAY);
bool found = findChessboardCorners(image, board_sz, corners, CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS);
if(found)
{
cornerSubPix(gray_image, corners, cv::Size(11, 11), cv::Size(-1, -1), TermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 30, 0.1));
drawChessboardCorners(gray_image, board_sz, corners, found);
}
// imshow("win1", image);
// imshow("win2", gray_image);
image_points.push_back(corners);
object_points.push_back(obj);
printf("Snap stored!");
successes++;
if(successes>=numBoards)
{
Mat intrinsic = Mat(3, 3, CV_32FC1);
Mat distCoeffs;
vector<Mat> rvecs;
vector<Mat> tvecs;
intrinsic.ptr<float>(0)[0] = 1;
intrinsic.ptr<float>(1)[1] = 1;
calibrateCamera(object_points, image_points, image.size(), intrinsic, distCoeffs, rvecs, tvecs);
return image;
}
}
// Mat imageUndistorted;
// while(1)
// {
// undistort(image, imageUndistorted, intrinsic, distCoeffs);
//
// imshow("win1", image);
// imshow("win2", imageUndistorted);
// waitKey(1);
// }
return image;
};