mirror of
https://github.com/opencv/opencv.git
synced 2025-06-12 20:42:53 +08:00
Make aruco dependency optional for interactive calibration app
This commit is contained in:
parent
8abd163464
commit
a56bd1fbba
@ -1,4 +1,7 @@
|
|||||||
set(OPENCV_INTERACTIVECALIBRATION_DEPS opencv_core opencv_imgproc opencv_features2d opencv_aruco opencv_highgui opencv_calib3d opencv_videoio)
|
set(OPENCV_INTERACTIVECALIBRATION_DEPS opencv_core opencv_imgproc opencv_features2d opencv_highgui opencv_calib3d opencv_videoio)
|
||||||
|
if(${BUILD_opencv_aruco})
|
||||||
|
list(APPEND OPENCV_INTERACTIVECALIBRATION_DEPS opencv_aruco)
|
||||||
|
endif()
|
||||||
ocv_check_dependencies(${OPENCV_INTERACTIVECALIBRATION_DEPS})
|
ocv_check_dependencies(${OPENCV_INTERACTIVECALIBRATION_DEPS})
|
||||||
|
|
||||||
if(NOT OCV_DEPENDENCIES_FOUND)
|
if(NOT OCV_DEPENDENCIES_FOUND)
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
#include <opencv2/calib3d.hpp>
|
#include <opencv2/calib3d.hpp>
|
||||||
#include <opencv2/imgproc.hpp>
|
#include <opencv2/imgproc.hpp>
|
||||||
#include <opencv2/aruco/charuco.hpp>
|
|
||||||
#include <opencv2/highgui.hpp>
|
#include <opencv2/highgui.hpp>
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -75,6 +74,7 @@ bool CalibProcessor::detectAndParseChessboard(const cv::Mat &frame)
|
|||||||
|
|
||||||
bool CalibProcessor::detectAndParseChAruco(const cv::Mat &frame)
|
bool CalibProcessor::detectAndParseChAruco(const cv::Mat &frame)
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_OPENCV_ARUCO
|
||||||
cv::Ptr<cv::aruco::Board> board = mCharucoBoard.staticCast<cv::aruco::Board>();
|
cv::Ptr<cv::aruco::Board> board = mCharucoBoard.staticCast<cv::aruco::Board>();
|
||||||
|
|
||||||
std::vector<std::vector<cv::Point2f> > corners, rejected;
|
std::vector<std::vector<cv::Point2f> > corners, rejected;
|
||||||
@ -95,14 +95,16 @@ bool CalibProcessor::detectAndParseChAruco(const cv::Mat &frame)
|
|||||||
}
|
}
|
||||||
centerX /= currentCharucoCorners.size[0];
|
centerX /= currentCharucoCorners.size[0];
|
||||||
centerY /= currentCharucoCorners.size[0];
|
centerY /= currentCharucoCorners.size[0];
|
||||||
//cv::circle(frame, cv::Point2f(centerX, centerY), 10, cv::Scalar(0, 255, 0), 10);
|
|
||||||
mTemplateLocations.insert(mTemplateLocations.begin(), cv::Point2f(centerX, centerY));
|
mTemplateLocations.insert(mTemplateLocations.begin(), cv::Point2f(centerX, centerY));
|
||||||
cv::aruco::drawDetectedCornersCharuco(frame, currentCharucoCorners, currentCharucoIds);
|
cv::aruco::drawDetectedCornersCharuco(frame, currentCharucoCorners, currentCharucoIds);
|
||||||
mCurrentCharucoCorners = currentCharucoCorners;
|
mCurrentCharucoCorners = currentCharucoCorners;
|
||||||
mCurrentCharucoIds = currentCharucoIds;
|
mCurrentCharucoIds = currentCharucoIds;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
(void)frame;
|
||||||
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -231,6 +233,7 @@ bool CalibProcessor::checkLastFrame()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
#ifdef HAVE_OPENCV_ARUCO
|
||||||
cv::Mat r, t, angles;
|
cv::Mat r, t, angles;
|
||||||
std::vector<cv::Point3f> allObjPoints;
|
std::vector<cv::Point3f> allObjPoints;
|
||||||
allObjPoints.reserve(mCurrentCharucoIds.total());
|
allObjPoints.reserve(mCurrentCharucoIds.total());
|
||||||
@ -248,6 +251,7 @@ bool CalibProcessor::checkLastFrame()
|
|||||||
mCalibData->allCharucoCorners.pop_back();
|
mCalibData->allCharucoCorners.pop_back();
|
||||||
mCalibData->allCharucoIds.pop_back();
|
mCalibData->allCharucoIds.pop_back();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return isFrameBad;
|
return isFrameBad;
|
||||||
}
|
}
|
||||||
@ -266,10 +270,12 @@ CalibProcessor::CalibProcessor(cv::Ptr<calibrationData> data, captureParameters
|
|||||||
switch(mBoardType)
|
switch(mBoardType)
|
||||||
{
|
{
|
||||||
case chAruco:
|
case chAruco:
|
||||||
|
#ifdef HAVE_OPENCV_ARUCO
|
||||||
mArucoDictionary = cv::aruco::getPredefinedDictionary(
|
mArucoDictionary = cv::aruco::getPredefinedDictionary(
|
||||||
cv::aruco::PREDEFINED_DICTIONARY_NAME(capParams.charucoDictName));
|
cv::aruco::PREDEFINED_DICTIONARY_NAME(capParams.charucoDictName));
|
||||||
mCharucoBoard = cv::aruco::CharucoBoard::create(mBoardSize.width, mBoardSize.height, capParams.charucoSquareLenght,
|
mCharucoBoard = cv::aruco::CharucoBoard::create(mBoardSize.width, mBoardSize.height, capParams.charucoSquareLenght,
|
||||||
capParams.charucoMarkerSize, mArucoDictionary);
|
capParams.charucoMarkerSize, mArucoDictionary);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case AcirclesGrid:
|
case AcirclesGrid:
|
||||||
mBlobDetectorPtr = cv::SimpleBlobDetector::create();
|
mBlobDetectorPtr = cv::SimpleBlobDetector::create();
|
||||||
|
@ -6,8 +6,10 @@
|
|||||||
#define FRAME_PROCESSOR_HPP
|
#define FRAME_PROCESSOR_HPP
|
||||||
|
|
||||||
#include <opencv2/core.hpp>
|
#include <opencv2/core.hpp>
|
||||||
#include <opencv2/aruco/charuco.hpp>
|
|
||||||
#include <opencv2/calib3d.hpp>
|
#include <opencv2/calib3d.hpp>
|
||||||
|
#ifdef HAVE_OPENCV_ARUCO
|
||||||
|
#include <opencv2/aruco/charuco.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "calibCommon.hpp"
|
#include "calibCommon.hpp"
|
||||||
#include "calibController.hpp"
|
#include "calibController.hpp"
|
||||||
@ -37,8 +39,10 @@ protected:
|
|||||||
cv::Mat mCurrentCharucoIds;
|
cv::Mat mCurrentCharucoIds;
|
||||||
|
|
||||||
cv::Ptr<cv::SimpleBlobDetector> mBlobDetectorPtr;
|
cv::Ptr<cv::SimpleBlobDetector> mBlobDetectorPtr;
|
||||||
|
#ifdef HAVE_OPENCV_ARUCO
|
||||||
cv::Ptr<cv::aruco::Dictionary> mArucoDictionary;
|
cv::Ptr<cv::aruco::Dictionary> mArucoDictionary;
|
||||||
cv::Ptr<cv::aruco::CharucoBoard> mCharucoBoard;
|
cv::Ptr<cv::aruco::CharucoBoard> mCharucoBoard;
|
||||||
|
#endif
|
||||||
|
|
||||||
int mNeededFramesNum;
|
int mNeededFramesNum;
|
||||||
unsigned mDelayBetweenCaptures;
|
unsigned mDelayBetweenCaptures;
|
||||||
|
@ -4,10 +4,13 @@
|
|||||||
|
|
||||||
#include <opencv2/core.hpp>
|
#include <opencv2/core.hpp>
|
||||||
#include <opencv2/calib3d.hpp>
|
#include <opencv2/calib3d.hpp>
|
||||||
#include <opencv2/aruco/charuco.hpp>
|
|
||||||
#include <opencv2/cvconfig.h>
|
#include <opencv2/cvconfig.h>
|
||||||
#include <opencv2/highgui.hpp>
|
#include <opencv2/highgui.hpp>
|
||||||
|
|
||||||
|
#ifdef HAVE_OPENCV_ARUCO
|
||||||
|
#include <opencv2/aruco/charuco.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
@ -50,31 +53,27 @@ bool calib::showOverlayMessage(const std::string& message)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void deleteButton(int state, void* data)
|
static void deleteButton(int, void* data)
|
||||||
{
|
{
|
||||||
state++; //to avoid gcc warnings
|
|
||||||
(static_cast<cv::Ptr<calibDataController>*>(data))->get()->deleteLastFrame();
|
(static_cast<cv::Ptr<calibDataController>*>(data))->get()->deleteLastFrame();
|
||||||
calib::showOverlayMessage("Last frame deleted");
|
calib::showOverlayMessage("Last frame deleted");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void deleteAllButton(int state, void* data)
|
static void deleteAllButton(int, void* data)
|
||||||
{
|
{
|
||||||
state++;
|
|
||||||
(static_cast<cv::Ptr<calibDataController>*>(data))->get()->deleteAllData();
|
(static_cast<cv::Ptr<calibDataController>*>(data))->get()->deleteAllData();
|
||||||
calib::showOverlayMessage("All frames deleted");
|
calib::showOverlayMessage("All frames deleted");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void saveCurrentParamsButton(int state, void* data)
|
static void saveCurrentParamsButton(int, void* data)
|
||||||
{
|
{
|
||||||
state++;
|
|
||||||
if((static_cast<cv::Ptr<calibDataController>*>(data))->get()->saveCurrentCameraParameters())
|
if((static_cast<cv::Ptr<calibDataController>*>(data))->get()->saveCurrentCameraParameters())
|
||||||
calib::showOverlayMessage("Calibration parameters saved");
|
calib::showOverlayMessage("Calibration parameters saved");
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_QT
|
#ifdef HAVE_QT
|
||||||
static void switchVisualizationModeButton(int state, void* data)
|
static void switchVisualizationModeButton(int, void* data)
|
||||||
{
|
{
|
||||||
state++;
|
|
||||||
ShowProcessor* processor = static_cast<ShowProcessor*>(((cv::Ptr<FrameProcessor>*)data)->get());
|
ShowProcessor* processor = static_cast<ShowProcessor*>(((cv::Ptr<FrameProcessor>*)data)->get());
|
||||||
processor->switchVisualizationMode();
|
processor->switchVisualizationMode();
|
||||||
}
|
}
|
||||||
@ -103,6 +102,11 @@ int main(int argc, char** argv)
|
|||||||
|
|
||||||
captureParameters capParams = paramsController.getCaptureParameters();
|
captureParameters capParams = paramsController.getCaptureParameters();
|
||||||
internalParameters intParams = paramsController.getInternalParameters();
|
internalParameters intParams = paramsController.getInternalParameters();
|
||||||
|
#ifndef HAVE_OPENCV_ARUCO
|
||||||
|
if(capParams.board == chAruco)
|
||||||
|
CV_Error(cv::Error::StsNotImplemented, "Aruco module is disabled in current build configuration."
|
||||||
|
" Consider usage of another calibration pattern\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
cv::TermCriteria solverTermCrit = cv::TermCriteria(cv::TermCriteria::COUNT+cv::TermCriteria::EPS,
|
cv::TermCriteria solverTermCrit = cv::TermCriteria(cv::TermCriteria::COUNT+cv::TermCriteria::EPS,
|
||||||
intParams.solverMaxIters, intParams.solverEps);
|
intParams.solverMaxIters, intParams.solverEps);
|
||||||
@ -172,6 +176,7 @@ int main(int argc, char** argv)
|
|||||||
calibrationFlags, solverTermCrit);
|
calibrationFlags, solverTermCrit);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
#ifdef HAVE_OPENCV_ARUCO
|
||||||
cv::Ptr<cv::aruco::Dictionary> dictionary =
|
cv::Ptr<cv::aruco::Dictionary> dictionary =
|
||||||
cv::aruco::getPredefinedDictionary(cv::aruco::PREDEFINED_DICTIONARY_NAME(capParams.charucoDictName));
|
cv::aruco::getPredefinedDictionary(cv::aruco::PREDEFINED_DICTIONARY_NAME(capParams.charucoDictName));
|
||||||
cv::Ptr<cv::aruco::CharucoBoard> charucoboard =
|
cv::Ptr<cv::aruco::CharucoBoard> charucoboard =
|
||||||
@ -183,6 +188,7 @@ int main(int argc, char** argv)
|
|||||||
globalData->cameraMatrix, globalData->distCoeffs,
|
globalData->cameraMatrix, globalData->distCoeffs,
|
||||||
cv::noArray(), cv::noArray(), globalData->stdDeviations, cv::noArray(),
|
cv::noArray(), cv::noArray(), globalData->stdDeviations, cv::noArray(),
|
||||||
globalData->perViewErrors, calibrationFlags, solverTermCrit);
|
globalData->perViewErrors, calibrationFlags, solverTermCrit);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
dataController->updateUndistortMap();
|
dataController->updateUndistortMap();
|
||||||
dataController->printParametersToConsole(std::cout);
|
dataController->printParametersToConsole(std::cout);
|
||||||
|
Loading…
Reference in New Issue
Block a user