2016-06-21 3 views
1

J'exploite OpenCV pour calibrer un ensemble d'images. J'utilise la fonction standard cv::calibrateCamera proposée par OpenCV, rien de spécial ici. Les images sont au format JPEG et le drapeau d'orientation EXIF ​​est défini (et il peut être! = 1).Résultats d'étalonnage de caméra inattendus avec OpenCV sur images JPEG et orientation EXIF ​​

J'ai remarqué que si les images ne sont pas toutes orientées en haut à gauche (Orientation == 1), le résultat de l'étalonnage est faux, ce qui entraîne généralement une erreur RMS très élevée. Au contraire, si je corrige manuellement l'orientation (en utilisant mogrify ou exiftool, par exemple), le résultat est comme prévu.

Avez-vous déjà rencontré ce genre de comportement? Pouvez-vous m'expliquer pourquoi cela se passe?

En guise de remarque, j'utilise OpenCV 3.1 sur un Mac OSX El Capitan, installé via Homebrew. Le code est en C++.

Répondre

0

utilisez-vous imread ou cvLoadImage? imread pour opencv 3.1 semble gérer correctement exif, mais cvLoadImage pas. Voir le bug suivant opencv https://github.com/opencv/opencv/issues/6673

+0

En fait, j'utilise 'imread'. Néanmoins, je n'ai toujours pas la raison pour laquelle l'orientation de l'image devrait influencer l'étalonnage. – lec00q

+0

Toutes vos images ont-elles la même orientation? En tant que vérification, enregistrez une copie de chaque image après avoir trouvé les coins du damier et écrit les coins sur l'image. Enregistrez l'image en tant que png afin de vous débarrasser des informations de rotation, et cela pourrait vous montrer quelques problèmes – Paulus

+0

Ils n'ont pas la même orientation, c'est sûr. Comment cela devrait-il influencer l'étalonnage? Je passe juste un ensemble de coordonnées de point à la routine d'étalonnage, pas les images elles-mêmes. Néanmoins, comme je pense que je n'obtiendrai pas de réponse à ma question, je vais choisir votre réponse comme la meilleure (et la seule). Merci pour votre temps. – lec00q