J'utilise opencv pour détester des points de points après l'étalonnage de la caméra. Le code suit.
cvUndistort2( srcImage, dstImage, &camera1, &dist_coeffs1 );
3 Réponses :
Ce peut être votre taille de matrice :)
OpenCV attend un vecteur de points - une colonne ou une matrice de ligne avec deux canaux. Mais comme votre matrice d'entrée n'est que 2 pts et que le nombre de canaux est également 1, il ne peut pas déterminer quelle est l'entrée, la rangée ou la colonne. P>
donc, remplissez un tapis d'entrée plus long avec des valeurs de body et Ne gardez que le premier: p> tandis que OpenCV spécifie des points non déclenchées n'accepte que des entrées à 2 canaux, en réalité, elle accepte. p> (comme on le voit dans tandistorT.cpp, la ligne 390) p> mais un bogue à l'intérieur (ou un manque d'informations disponibles), le permet de mélanger à tort le second avec le troisième, quand Le nombre de colonnes est 2. Ainsi, vos données sont considérées comme une colonne 2-rangées, 1-canaux. p> p>
Que voulez-vous dire quand vous dites 1 canal? J'utilise constante CV_32FC2 dans CVCreatemat, ce qui signifie 2 canaux. Merci.
J'ai examiné le code source du FUNC () et la documentation est fausse. Regardez la modification ci-dessus pour plus de détails, s'il vous plaît
Les points doivent être «non-formés» à l'aide de la matrice de caméra.
Plus spécifiquement, après l'appel de CVundistortPoints code> La transformation suivante doit être ajoutée: p> std::vector<cv::Point2f> inputDistortedPoints = ...
std::vector<cv::Point2f> outputUndistortedPoints;
cv::Mat cameraMatrix = ...
cv::Mat distCoeffs = ...
cv::undistortPoints(inputDistortedPoints, outputUndistortedPoints, cameraMatrix, distCoeffs, cv::noArray(), cameraMatrix);
J'atteigne également ces problèmes et je prends un peu de temps pour rechercher enfin à bien comprendre.
de
p>
formule
Vous voyez la formule ci-dessus, dans le système ouvert, l'opération de déformation est avant la matrice de la caméra, la commande de processus est donc la suivante:
de
image_distorded -> caméra_matrix -> Fonction de non-déformation-> caméra_matrix-> Retour à image_undistorded.
P>
Vous avez donc besoin d'une petite solution et de caméra1 à nouveau.
de
Mat Eye3 = Tapis :: Eye (3, 3, CV_64F);
de
CvundistortPoints (SRC, DST, DST, & CAMERA1, & DISCOEFFFS1, & Eye3, & Caméra1 B>); P>
Sinon, si les deux derniers paramètres sont vides, il serait projeté à une coordonnée d'image normalisée. P>
Voir Codes: OPENCV-3.4.0-SRC \ Modules \ imgProc \ src \ Undistort.CPP: 297 cvundistortPointSinternal () P>
Êtes-vous sûr que la caméra1 et la caméra sont les mêmes?
Oui, la même chose - j'ai une question fixe. Merci d'avoir souligné. De plus, je reçois un tel comportement à EmguCv puis essayé de déterminer où un tel comportement est introduit: dans OpenCV ou Emgucv elle-même. Il est apparu dans OpenCV.