#include "Arith_BATask.h" #include "ceres/ceres.h" using namespace ceres; struct CostFunctor { template bool operator()(const T* const x, T* residual) const { residual[0] = 10.0 - x[0]; return true; } }; BA_Task::BA_Task() { // 来个100帧 _imgVec.reserve(100); } BA_Task::~BA_Task() { } SINT32 BA_Task::addFrame(GD_VIDEO_FRAME_S img, FrameInfo para) { // 缓存图像帧 if (img.enPixelFormat == GD_PIXEL_FORMAT_E::GD_PIXEL_FORMAT_GRAY_Y8) { _imgVec.emplace_back(Mat(img.u32Height, img.u32Width, CV_8UC1, img.u64VirAddr[0])); } return _imgVec.size(); } void BA_Task::Test() { google::InitGoogleLogging("ceres"); // The variable to solve for with its initial value. It will be // mutated in place by the solver. double x = 0.5; const double initial_x = x; // Build the problem. ceres::Problem problem; // Set up the only cost function (also known as residual). This uses // auto-differentiation to obtain the derivative (jacobian). ceres::CostFunction* cost_function = new ceres::AutoDiffCostFunction(new CostFunctor); problem.AddResidualBlock(cost_function, nullptr, &x); // Run the solver! ceres::Solver::Options options; options.minimizer_progress_to_stdout = true; ceres::Solver::Summary summary; ceres::Solve(options, &problem, &summary); std::cout << summary.BriefReport() << "\n"; std::cout << "x : " << initial_x << " -> " << x << "\n"; }