我正在使用ceres-solver和AutoDiffCostFunction。我的成本函數作爲參數1x3向量並輸出1x1殘差。 如何創建我的T *參數向量中的opencv Mat?它可能是Jet或浮動。 我嘗試下面的代碼,但得到錯誤「無法從噴氣CONVER浮動」將T * array(Jet *或float *)轉換爲cv :: Mat <CV_32f>
struct ErrorFunc
{
template <typename T>
bool operator()(const T * const Kparams, T * residual) const // Kparams - [f, u, v]
{
cv::Mat K = cv::Mat::eye(3, 3, CV_32F);
K.at<float>(0, 0) = float(Kparams[0]); // error
K.at<float>(0, 2) = float(Kparams[1]); // error
K.at<float>(1, 1) = float(Kparams[0]); // error
K.at<float>(1, 2) = float(Kparams[2]); // error
Mat Hdot = K.inv() * H * K;
cv::decomposeHomographyMat(Hdot, K, rot, tr, norm); //want to call this opencv function
residual[0] = calcResidual(norm);
return true;
}
Mat H;
}
有一種方式來獲得特徵矩陣進行T *矩陣:
const Eigen::Matrix< T, 3, 3, Eigen::RowMajor> hom = Eigen::Map< const Eigen::Matrix< T, 3, 3, Eigen::RowMajor> >(Matrix)
,但我想打電話給cv::decomposeHomographyMat
。我怎樣才能做到這一點?
順便說一句,CV :: Mat沒有[]運算符 – berak
您是否可以使用此原型創建函數? float getFromJetAt(Jet * Kparams,int pos)。該函數應該從Jet中獲得位置pos的值。而且你不必擔心它在該函數中浮動的可能性。 –