You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.5 KiB
68 lines
1.5 KiB
6 months ago
|
#include "Arith_BATask.h"
|
||
|
#include "ceres/ceres.h"
|
||
|
using namespace ceres;
|
||
|
|
||
|
struct CostFunctor {
|
||
|
template <typename T>
|
||
|
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<CostFunctor, 1, 1>(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";
|
||
|
}
|