À l'aide de estimateRigidTransform au lieu de findHomography

L'exemple dans le lien ci-dessous à l'aide de findHomography pour obtenir la transformation entre deux ensembles de points. Je veux limiter les degrés de liberté utilisés dans la transformation veux donc remplacer findHomography avec estimateRigidTransform.

http://docs.opencv.org/doc/tutorials/features2d/feature_homography/feature_homography.html#feature-homography

Ci-dessous-je utiliser estimateRigidTransform pour obtenir la transformation entre l'objet et la scène de points. objPoints et scePoints sont représentés par vector <Point2f>.

Mat H = estimateRigidTransform(objPoints, scePoints, false);

Suivant la méthode utilisée dans le tutoriel ci-dessus, j'ai envie de transformer le coin des valeurs à l'aide de la transformation H. Le tutoriel utilise perspectiveTransform avec la matrice de 3x3 retourné par findHomography. Avec la rigide transformer il ne renvoie une Matrice 2x3 donc cette méthode ne peut pas être utilisé.

Comment transformer les valeurs des angles, représentée comme vector <Point2f> avec cette Matrice 2x3. Je suis juste à la recherche à effectuer les mêmes fonctions que le tuto mais avec moins de degrés de liberté pour la transformation. J'ai regardé d'autres méthodes telles que la warpAffine et getPerspectiveTransform aussi bien, mais jusqu'à présent pas trouvé une solution.

EDIT:

J'ai essayé la suggestion de David Nilosek. Ci-dessous j'ai ajouté les lignes de la matrice.

Mat row = (Mat_<double>(1,3) << 0, 0, 1);
H.push_back(row);

Cependant cela donne cette erreur lors de l'utilisation de perspectiveTransform.

OpenCV Error: Assertion failed (mtype == type0 || (CV_MAT_CN(mtype) == CV_MAT_CN(type0) && ((1 << type0) & fixedDepthMask) != 0)) in create, file /Users/cgray/Downloads/opencv-2.4.6/modules/core/src/matrix.cpp, line 1486
libc++abi.dylib: terminating with uncaught exception of type cv::Exception: /Users/cgray/Downloads/opencv-2.4.6/modules/core/src/matrix.cpp:1486: error: (-215) mtype == type0 || (CV_MAT_CN(mtype) == CV_MAT_CN(type0) && ((1 << type0) & fixedDepthMask) != 0) in function create

ChronoTrigger a suggéré d'utiliser warpAffine. Je suis l'appel de la warpAffine méthode ci-dessous, la taille de 1 x 5 est la taille de objCorners et sceCorners.

warpAffine(objCorners, sceCorners, H, Size(1,4));

Cela donne l'erreur ci-dessous, ce qui suggère le mauvais type. objCorners et sceCorners sont vector <Point2f> représentant les 4 coins. J'ai pensé warpAffine accepterait Mat images qui peut expliquer l'erreur.

OpenCV Error: Assertion failed ((M0.type() == CV_32F || M0.type() == CV_64F) && M0.rows == 2 && M0.cols == 3) in warpAffine, file /Users/cgray/Downloads/opencv-2.4.6/modules/imgproc/src/imgwarp.cpp, line 3280

OriginalL'auteur Tom smith | 2014-04-29