(To be written)
こちらのほうがたいへん簡単.PCLを使わなくてもいい時などはこちらで行う方がベター.
たとえば,
cv::Mat transMat( 4, 4, CV_64F );
という行列を考えると,
cv::Point3d  point;という成分を加える最も単純な方法は
transMat.at<double>( 0, 3 ) += point.x;transMat.at<double>( 1, 3 ) += point.y;transMat.at<double>( 2, 3 ) += point.z;とするとよい.回転も同様.
剛体変換行列の合成
cv::Mat transMatA2B, transMatA2C;が定義されている場合,合成は単に
transMatB2C = transMatA2C * transMatA2B.inv();
のように行える.先の平行移動もすべて行列の形で扱った方が,個人的には見通しが良い
(速度の問題を抱えている場合を除いては…).
すなわち
cv::Mat point;point = cv::Mat().eye( 4, 4, CV_64F );transMat.at<double>( 0, 3 ) += point.x;transMat.at<double>( 1, 3 ) += point.y;transMat.at<double>( 2, 3 ) += point.z;transMat * point;