Pracuję nad podstawową aplikacją rozszerzonej rzeczywistości na Androida. To, co dotychczas zrobiłem, to wykrycie kwadratu z opencv, a następnie użycie cvFindExtrinsicCameraParams2() Obliczyłem wektor obrotu i translacji. Do tego użyłem 4 punktów obiektu, które są tylko rogami kwadratu (0,0,0) i 4 rogami kwadratu na obrazku.Jak używać wektora obrotu i translacji OpenCV z OpenGL ES w systemie Android?
Daje to całkiem niezłą matrycę obrotu i translacji. Obliczyłem także macierz rotacji za pomocą cvRodrigues2(), ponieważ użycie tego jest łatwiejsze niż wektor obrotu. Dopóki używam ich do rysowania punktów na obrazku, wszystko działa dobrze. Następnym krokiem jest przekazanie tych wektorów i macierzy z powrotem do java, a następnie użycie ich z OpenGL do narysowania kwadratu w OpenGLView. Kwadrat powinien znajdować się dokładnie wokół kwadratu na obrazie, który jest wyświetlany za OpenGLView.
Mój problem polega na tym, że nie mogę znaleźć prawidłowego sposobu użycia macierzy obrotu i wektora translacji w OpenGL. Zacząłem od dokładnie tych samych punktów obiektu, które były używane dla funkcji openCV. Następnie zastosowałem matrycę obrotu i wektor translacji w praktycznie dowolny możliwy sposób, jaki mogłem wymyślić. Niestety, żadne z tych podejść nie przynosi rezultatów, które i tak są bliskie oczekiwaniom. Czy ktoś może mi powiedzieć, jak z nich korzystać poprawnie?
Do tej pory "najbliższym" rezultatem, jaki uzyskałem, było losowe pomnożenie całej macierzy przez -1. Ale przez większość czasu kwadraty nadal wyglądają jak lustro odwrócone lub obrócone o 180 stopni. Sądzę więc, że był to tylko szczęśliwy traf, ale nie właściwe podejście.
Może trzeba [przetłumaczyć] (http://opencv.willowgarage.com/wiki/Posit) coś. – genpfault