32 #include <opencv2/opencv.hpp>
34 #include "Image/ByteImage.h"
35 #include "Image/ImageProcessor.h"
36 #include "Image/IplImageAdaptor.h"
45 providerName = getProperty<std::string>(
"ImageProviderAdapterName").getValue();
48 const int cornersPerRow = getProperty<int>(
"NumberOfRows").getValue() - 1;
49 const int cornersPerColumn = getProperty<int>(
"NumberOfColumns").getValue() - 1;
50 const int cornersPerImage = cornersPerColumn * cornersPerRow;
51 const double squareSize = getProperty<double>(
"PatternSquareSize").getValue();
53 m_pCorners2DFloat =
new CvPoint2D32f[cornersPerImage];
54 m_pCorners2D =
new CvPoint2D64f[cornersPerImage];
55 m_pCorners3D =
new CvPoint3D64f[cornersPerImage];
57 waitingIntervalBetweenImages = getProperty<int>(
"WaitingIntervalBetweenImages").getValue();
58 m_sCameraParameterFileName = getProperty<std::string>(
"OutputFileName").getValue();
59 desiredNumberOfImages = getProperty<int>(
"NumberOfImages").getValue();
60 numberOfCapturedImages = 0;
64 ARMARX_INFO <<
"Calibration pattern with " << cornersPerColumn + 1 <<
" x "
65 << cornersPerRow + 1 <<
" squares of size " << squareSize;
66 double etalonParams[3] = {
67 double(cornersPerColumn + 1), double(cornersPerRow + 1), squareSize};
69 m_pCalibFilter->
SetFrames(desiredNumberOfImages);
79 imageProviderPrx = getProxy<ImageProviderInterfacePrx>(providerName);
81 cameraImages =
new CByteImage*[2];
85 startingTime = IceUtil::Time::now();
86 timeOfLastCapture = IceUtil::Time::now();
99 delete cameraImages[0];
100 delete cameraImages[1];
101 delete[] cameraImages;
102 delete m_pCalibFilter;
103 delete[] m_pCorners3D;
104 delete[] m_pCorners2D;
105 delete[] m_pCorners2DFloat;
111 long timeSinceStart = (IceUtil::Time::now() - startingTime).toMilliSeconds();
113 if (timeSinceStart < 10000)
115 ARMARX_VERBOSE <<
"Time until start of capture: " << timeSinceStart - 10000 <<
" ms";
127 int nNumberImages =
getImages(cameraImages);
130 if ((IceUtil::Time::now() - timeOfLastCapture).toMilliSeconds() >
131 waitingIntervalBetweenImages)
133 ARMARX_INFO <<
"Capturing image " << numberOfCapturedImages + 1 <<
" of "
134 << desiredNumberOfImages;
135 IplImage* ppIplImages[2] = {IplImageAdaptor::Adapt(cameraImages[0]),
136 IplImageAdaptor::Adapt(cameraImages[1])};
141 numberOfCapturedImages++;
143 m_pCalibFilter->
Push();
144 timeOfLastCapture = IceUtil::Time::now();
146 if (numberOfCapturedImages == desiredNumberOfImages)
152 ARMARX_INFO <<
"Saving camera calibration to file "
153 << m_sCameraParameterFileName;
155 m_sCameraParameterFileName.c_str());