Uso OpenCV per la serie di punti di undestort dopo la calibrazione della videocamera. Il codice segue.Come eliminare i punti nelle coordinate delle riprese della telecamera e ottenere coordinate dell'immagine non distorte corrispondenti?
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);
Dopo il codice sopra dst
contiene seguenti numeri:
-8.82689655e-001 -7.05507338e-001 4.16228324e-001 3.04863811e-001
troppo piccole in confronto con i numeri in src
.
Allo stesso tempo se undistort immagine tramite la chiamata:
cvUndistort2(srcImage, dstImage, &camera1, &dist_coeffs1);
ricevo buona immagine falsato che significa che le coordinate dei pixel non vengono modificate così drasticamente rispetto a punti distinti.
Come ottenere la stessa distorsione per punti specifici come per le immagini? Grazie.
sei sicuro che camera1 e macchina fotografica sono gli stessi? – Sam
sì, lo stesso - ho una domanda fissa. Grazie per avermelo fatto notare Inoltre inizialmente ricevo tale comportamento in EmguCV e poi ho cercato di capire dove viene introdotto tale comportamento: in OpenCV o EmguCV stesso. È apparso in OpenCV. – sergtk