Sto rilevando i contrassegni sulle immagini catturate dal mio iPad. Per questo motivo voglio calcolare le traduzioni e le rotazioni tra di loro, voglio cambiare il punto di vista delle immagini su queste immagini, quindi sembrerebbe che le stia catturando direttamente sopra i marker.OpenCV: wrapPerspective su immagine intera
Proprio ora sto usando
points2D.push_back(cv::Point2f(0, 0));
points2D.push_back(cv::Point2f(50, 0));
points2D.push_back(cv::Point2f(50, 50));
points2D.push_back(cv::Point2f(0, 50));
Mat perspectiveMat = cv::getPerspectiveTransform(points2D, imagePoints);
cv::warpPerspective(*_image, *_undistortedImage, M, cv::Size(_image->cols, _image->rows));
che dà le mie questi risultati (guarda nell'angolo in basso a destra per risultato di warpPerspective
):
Come probabilmente vedi l'immagine del risultato contenente un marker riconosciuto nell'angolo in alto a sinistra dell'immagine del risultato. Il mio problema è che voglio catturare l'intera immagine (senza ritagliare) in modo da poter rilevare altri marcatori su quell'immagine in seguito.
Come posso farlo? Forse dovrei usare i vettori di rotazione/traduzione dalla funzione solvePnP
?
EDIT:
Purtroppo la modifica delle dimensioni dell'immagine distorta non aiutano molto, perché l'immagine è ancora tradotto in modo superiore sinistro del marcatore è in alto a sinistra dell'immagine.
Per esempio, quando ho raddoppiato dimensioni utilizzando:
cv::warpPerspective(*_image, *_undistortedImage, M, cv::Size(2*_image->cols, 2*_image->rows));
ho recieved queste immagini:
So che l'immagine di uscita può avere diverse dimenstions, ho provato con loro raddoppio (guarda domanda curato per risultati), ma non ha mi ha dato risultati utili Hai detto che il mio codice è incompleto - cosa dovrei aggiungere di? Sto utilizzando 'getPerspectiveTransform' per ottenere matrice di trasformazione, e sto usando coordinate di angoli di marcatore rilevato là come' dst' matrice (secondo la documentazione OpenCV - http://docs.opencv.org/modules/imgproc /doc/geometric_transformations.html#getperspectivetransform). – Axadiw
Beh, penso che le coordinate del tuo obiettivo di (-6, -6) ecc. Siano un po 'strane. Perché ciò significa che il tuo rettangolo target sarà a queste coordinate nell'immagine risultante. Per spostarli semplicemente sposta il rettangolo di destinazione al centro dell'immagine di destinazione. – littleimp
Grazie - Ho capito di aver postato l'array point2D sbagliato (l'ho modificato nella domanda in questo momento). Spostando un po 'questi punti si è spostato tutta l'immagine in uscita, ma ne sto ancora ritagliando alcune parti. – Axadiw