Skip to content

Commit a56bd1f

Browse files
committed
Make aruco dependency optional for interactive calibration app
1 parent 8abd163 commit a56bd1f

File tree

4 files changed

+33
-14
lines changed

4 files changed

+33
-14
lines changed

apps/interactive-calibration/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
set(OPENCV_INTERACTIVECALIBRATION_DEPS opencv_core opencv_imgproc opencv_features2d opencv_aruco opencv_highgui opencv_calib3d opencv_videoio)
1+
set(OPENCV_INTERACTIVECALIBRATION_DEPS opencv_core opencv_imgproc opencv_features2d opencv_highgui opencv_calib3d opencv_videoio)
2+
if(${BUILD_opencv_aruco})
3+
list(APPEND OPENCV_INTERACTIVECALIBRATION_DEPS opencv_aruco)
4+
endif()
25
ocv_check_dependencies(${OPENCV_INTERACTIVECALIBRATION_DEPS})
36

47
if(NOT OCV_DEPENDENCIES_FOUND)

apps/interactive-calibration/frameProcessor.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
#include <opencv2/calib3d.hpp>
99
#include <opencv2/imgproc.hpp>
10-
#include <opencv2/aruco/charuco.hpp>
1110
#include <opencv2/highgui.hpp>
1211

1312
#include <vector>
@@ -75,6 +74,7 @@ bool CalibProcessor::detectAndParseChessboard(const cv::Mat &frame)
7574

7675
bool CalibProcessor::detectAndParseChAruco(const cv::Mat &frame)
7776
{
77+
#ifdef HAVE_OPENCV_ARUCO
7878
cv::Ptr<cv::aruco::Board> board = mCharucoBoard.staticCast<cv::aruco::Board>();
7979

8080
std::vector<std::vector<cv::Point2f> > corners, rejected;
@@ -95,14 +95,16 @@ bool CalibProcessor::detectAndParseChAruco(const cv::Mat &frame)
9595
}
9696
centerX /= currentCharucoCorners.size[0];
9797
centerY /= currentCharucoCorners.size[0];
98-
//cv::circle(frame, cv::Point2f(centerX, centerY), 10, cv::Scalar(0, 255, 0), 10);
98+
9999
mTemplateLocations.insert(mTemplateLocations.begin(), cv::Point2f(centerX, centerY));
100100
cv::aruco::drawDetectedCornersCharuco(frame, currentCharucoCorners, currentCharucoIds);
101101
mCurrentCharucoCorners = currentCharucoCorners;
102102
mCurrentCharucoIds = currentCharucoIds;
103103
return true;
104104
}
105-
105+
#else
106+
(void)frame;
107+
#endif
106108
return false;
107109
}
108110

@@ -231,6 +233,7 @@ bool CalibProcessor::checkLastFrame()
231233
}
232234
}
233235
else {
236+
#ifdef HAVE_OPENCV_ARUCO
234237
cv::Mat r, t, angles;
235238
std::vector<cv::Point3f> allObjPoints;
236239
allObjPoints.reserve(mCurrentCharucoIds.total());
@@ -248,6 +251,7 @@ bool CalibProcessor::checkLastFrame()
248251
mCalibData->allCharucoCorners.pop_back();
249252
mCalibData->allCharucoIds.pop_back();
250253
}
254+
#endif
251255
}
252256
return isFrameBad;
253257
}
@@ -266,10 +270,12 @@ CalibProcessor::CalibProcessor(cv::Ptr<calibrationData> data, captureParameters
266270
switch(mBoardType)
267271
{
268272
case chAruco:
273+
#ifdef HAVE_OPENCV_ARUCO
269274
mArucoDictionary = cv::aruco::getPredefinedDictionary(
270275
cv::aruco::PREDEFINED_DICTIONARY_NAME(capParams.charucoDictName));
271276
mCharucoBoard = cv::aruco::CharucoBoard::create(mBoardSize.width, mBoardSize.height, capParams.charucoSquareLenght,
272277
capParams.charucoMarkerSize, mArucoDictionary);
278+
#endif
273279
break;
274280
case AcirclesGrid:
275281
mBlobDetectorPtr = cv::SimpleBlobDetector::create();

apps/interactive-calibration/frameProcessor.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
#define FRAME_PROCESSOR_HPP
77

88
#include <opencv2/core.hpp>
9-
#include <opencv2/aruco/charuco.hpp>
109
#include <opencv2/calib3d.hpp>
10+
#ifdef HAVE_OPENCV_ARUCO
11+
#include <opencv2/aruco/charuco.hpp>
12+
#endif
1113

1214
#include "calibCommon.hpp"
1315
#include "calibController.hpp"
@@ -37,8 +39,10 @@ class CalibProcessor : public FrameProcessor
3739
cv::Mat mCurrentCharucoIds;
3840

3941
cv::Ptr<cv::SimpleBlobDetector> mBlobDetectorPtr;
42+
#ifdef HAVE_OPENCV_ARUCO
4043
cv::Ptr<cv::aruco::Dictionary> mArucoDictionary;
4144
cv::Ptr<cv::aruco::CharucoBoard> mCharucoBoard;
45+
#endif
4246

4347
int mNeededFramesNum;
4448
unsigned mDelayBetweenCaptures;

apps/interactive-calibration/main.cpp

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@
44

55
#include <opencv2/core.hpp>
66
#include <opencv2/calib3d.hpp>
7-
#include <opencv2/aruco/charuco.hpp>
87
#include <opencv2/cvconfig.h>
98
#include <opencv2/highgui.hpp>
109

10+
#ifdef HAVE_OPENCV_ARUCO
11+
#include <opencv2/aruco/charuco.hpp>
12+
#endif
13+
1114
#include <string>
1215
#include <vector>
1316
#include <stdexcept>
@@ -50,31 +53,27 @@ bool calib::showOverlayMessage(const std::string& message)
5053
#endif
5154
}
5255

53-
static void deleteButton(int state, void* data)
56+
static void deleteButton(int, void* data)
5457
{
55-
state++; //to avoid gcc warnings
5658
(static_cast<cv::Ptr<calibDataController>*>(data))->get()->deleteLastFrame();
5759
calib::showOverlayMessage("Last frame deleted");
5860
}
5961

60-
static void deleteAllButton(int state, void* data)
62+
static void deleteAllButton(int, void* data)
6163
{
62-
state++;
6364
(static_cast<cv::Ptr<calibDataController>*>(data))->get()->deleteAllData();
6465
calib::showOverlayMessage("All frames deleted");
6566
}
6667

67-
static void saveCurrentParamsButton(int state, void* data)
68+
static void saveCurrentParamsButton(int, void* data)
6869
{
69-
state++;
7070
if((static_cast<cv::Ptr<calibDataController>*>(data))->get()->saveCurrentCameraParameters())
7171
calib::showOverlayMessage("Calibration parameters saved");
7272
}
7373

7474
#ifdef HAVE_QT
75-
static void switchVisualizationModeButton(int state, void* data)
75+
static void switchVisualizationModeButton(int, void* data)
7676
{
77-
state++;
7877
ShowProcessor* processor = static_cast<ShowProcessor*>(((cv::Ptr<FrameProcessor>*)data)->get());
7978
processor->switchVisualizationMode();
8079
}
@@ -103,6 +102,11 @@ int main(int argc, char** argv)
103102

104103
captureParameters capParams = paramsController.getCaptureParameters();
105104
internalParameters intParams = paramsController.getInternalParameters();
105+
#ifndef HAVE_OPENCV_ARUCO
106+
if(capParams.board == chAruco)
107+
CV_Error(cv::Error::StsNotImplemented, "Aruco module is disabled in current build configuration."
108+
" Consider usage of another calibration pattern\n");
109+
#endif
106110

107111
cv::TermCriteria solverTermCrit = cv::TermCriteria(cv::TermCriteria::COUNT+cv::TermCriteria::EPS,
108112
intParams.solverMaxIters, intParams.solverEps);
@@ -172,6 +176,7 @@ int main(int argc, char** argv)
172176
calibrationFlags, solverTermCrit);
173177
}
174178
else {
179+
#ifdef HAVE_OPENCV_ARUCO
175180
cv::Ptr<cv::aruco::Dictionary> dictionary =
176181
cv::aruco::getPredefinedDictionary(cv::aruco::PREDEFINED_DICTIONARY_NAME(capParams.charucoDictName));
177182
cv::Ptr<cv::aruco::CharucoBoard> charucoboard =
@@ -183,6 +188,7 @@ int main(int argc, char** argv)
183188
globalData->cameraMatrix, globalData->distCoeffs,
184189
cv::noArray(), cv::noArray(), globalData->stdDeviations, cv::noArray(),
185190
globalData->perViewErrors, calibrationFlags, solverTermCrit);
191+
#endif
186192
}
187193
dataController->updateUndistortMap();
188194
dataController->printParametersToConsole(std::cout);

0 commit comments

Comments
 (0)