小哥哥小姐姐覺得有用點個贊唄!
先在halcon中計算仿射變換矩陣并驗證
//在圖像中找到的模板中心位置
PicX:=[1680.721,2065.147,911.499,526.798,1290.920,1285.731,1300.953]
PicY:=[968.321,964.366,976.283,980.035, 587.055,394.727,1355.487]
//與圖像中查找到模板位置相對應的X軸坐標
MachX1:=[142.123,152.123,122.123,112.123]-132.123//132.123開始移動時,找到的模板時的機械位置下同
MachX2:=[135.220,135.220,135.220]-135.220
MachX:=[MachX1,MachX2]MachY1:=[-99.570,-99.570,-99.570,-99.570]+99.570//99.570開始移動時,找到的模板時的機械位置下同
MachY2:=[-60.980,-55.980,-80.980]+70.980
MachY:=[MachY1,MachY2]vector_to_hom_mat2d (PicX, PicY, MachX, MachY, HomMat2D)//求解變換矩陣HomMat2D
affine_trans_point_2d (HomMat2D, PicX[3], PicY[3], Qx, Qy)//根據模板中心坐標求取距離相機中心實際距離
VS中使用
//halcon求解出的矩陣
*0.0259974, -0.000400101, -33.2988
*-0.000265699, -0.0260035, 25.6161
HTuple hv_HomMat2DIdentity;
HomMat2dIdentity(&hv_HomMat2DIdentity);//初始化一個仿射變換矩陣//0.0259974 -0.000400101 -33.2988
//-0.000265699 -0.0260035 25.6161
hv_HomMat2DIdentity[0]=0.0259974;//給仿射變換矩陣寫入從halcon求取的值
hv_HomMat2DIdentity[1]=-0.000400101;
hv_HomMat2DIdentity[2]=-33.2988;
hv_HomMat2DIdentity[3]=-0.000265699;
hv_HomMat2DIdentity[4]=-0.0260035;
hv_HomMat2DIdentity[5]=25.6161;HTuple hv_Qx,hv_Qy;
AffineTransPoint2d(hv_HomMat2DIdentity, PicX, PicY, &hv_Qx, &hv_Qy);//通過尋找模板的坐標求取模板中心距離相機中心的實際位置。