Używam OpenCV do anulowania zestawu punktów po kalibracji kamery. Poniższy kod.Jak rozłączyć punkty we współrzędnych ujęcia kamery i uzyskać odpowiednie niezniekształcone współrzędne obrazu?
const int npoints = 2; // number of point specified
// Points initialization.
// Only 2 ponts in this example, in real code they are read from file.
float input_points[npoints][2] = {{0,0}, {2560, 1920}};
CvMat * src = cvCreateMat(1, npoints, CV_32FC2);
CvMat * dst = cvCreateMat(1, npoints, CV_32FC2);
// fill src matrix
float * src_ptr = (float*)src->data.ptr;
for (int pi = 0; pi < npoints; ++pi) {
for (int ci = 0; ci < 2; ++ci) {
*(src_ptr + pi * 2 + ci) = input_points[pi][ci];
}
}
cvUndistortPoints(src, dst, &camera1, &distCoeffs1);
Po powyższy kod dst
zawiera następujące liczby:
-8.82689655e-001 -7.05507338e-001 4.16228324e-001 3.04863811e-001
, które są zbyt małe, w porównaniu z liczbami w src
.
Jednocześnie gdybym undistort obraz za pośrednictwem połączenia:
cvUndistort2(srcImage, dstImage, &camera1, &dist_coeffs1);
otrzymam dobrą niezakłóconej obraz co oznacza, że współrzędne pikseli nie są modyfikowane tak drastycznie w porównaniu z oddzielnych punktów.
Jak uzyskać takie samo brak zniekształcenia dla określonych punktów, jak w przypadku obrazów? Dzięki.
czy jesteś pewien, że kamera 1 i kamera są takie same? – Sam
tak, to samo - mam ustalone pytanie. Dziękuję za wskazanie. Ponadto początkowo otrzymuję takie zachowanie w EmguCV, a następnie próbuję ustalić, gdzie takie zachowanie zostało wprowadzone: w OpenCV lub w samym EmguCV. Pojawił się w OpenCV. – sergtk