2D-> рд╕рдВрд╡рд░реНрдзрд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдореЗрдВ 3 рдбреА

рдЫрд╡рд┐

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХрд┐рд╕реА рджреГрд╢реНрдп рдореЗрдВ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдкрд╛рдП рдЧрдП рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╡рд░реНрдзрд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ 3D рд╕реНрдерд╛рди рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рджреЛ рдореЗрдЯреНрд░рд┐рд╕реЗрд╕ - рдкреНрд░реЛрдЬреЗрдХреНрд╢рди (GL_PROJECTION) рдФрд░ рдореЙрдбрд▓ (GL_MODELVIEW) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдУрдкрдирдЬреАрдПрд▓ рдореЗрдВред рд╣рдо OpenCV рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░реЗрдВрдЧреЗред

рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореБрдЭреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдРрд╕рд╛ рд╕рдВрд╕рд╛рдзрди рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬрд╣рд╛рдВ рдпрд╣ рд╕рд┐рд░реНрдл рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ (рд╢рд╛рдпрдж рдореИрдВ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рдерд╛), рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдиреБрдХрд╕рд╛рди рд╣реИрдВред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рдХрд╛рд░реНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣рдм рдкрд░ рдПрдХ рд▓реЗрдЦ рдЪреЛрдЯ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛рдПрдЧрд╛ред

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐


рдореИрдВ рдЦреБрдж рдПрдХ рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реВрдВ, рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ рдореИрдВ рдЦреБрдж рдХрд╛ рдСрдЧрдореЗрдВрдЯреЗрдб рд░рд┐рдпрд▓рд┐рдЯреА рдЗрдВрдЬрди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЖрдзрд╛рд░ OpenCV рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬрд╝рди рдХреЗ рд▓рд┐рдП рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реАред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ (iOS / Android) рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдкреНрд░рд╕реНрддрд╛рд╡ рдХреНрд╡рд╛рд▓рдХреЙрдо рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╣реИред

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдПрдЖрд░ рдПрд╕рдбреАрдХреЗ рдХреЛ рд╡реБрдлреЛрд░рд┐рдпрд╛ рдирд╛рдо рд╕реЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ ред рдЙрд╕реА рд╕рдордп, SDK рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕реНрдЯреЛрд░ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (AppStore, AndroidMarket) рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ, рд▓рд╛рдЗрд╕реЗрдВрд╕рд┐рдВрдЧ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЛ рдЧрд░реНрд╡ рдХреЗ рд╕рд╛рде рдмрддрд╛рддрд╛ рд╣реИред рдЗрд╕реА рд╕рдордп, рд╡реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдПрд╕рдбреАрдХреЗ рдХреБрдЫ рдЕрдирд╛рдо рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреНрд╡рд╛рд▓рдХреЙрдо рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдЗрд╕ рд▓рд┐рдВрдХ рдХреЛ рд░рд╛рдЗрдЯ рдореЗрдиреВ рдореЗрдВ рдорд┐рд▓ рд░рд╣реЗ рд╕реНрдЯрд╛рд░реНрдЯрд┐рдВрдЧ рдПрд╕рдбреАрдХреЗ -> рд╕реНрдЯреЗрдк 3: рдХрдВрдкрд╛рдЗрд▓рд┐рдВрдЧ рдПрдВрдб рд░рдирд┐рдВрдЧ ... -> рдкрдмреНрд▓рд┐рд╢ рдпреЛрд░ рдПрдкреНрд▓реАрдХреЗрд╢рди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЗрд╕ рд╕реЗрдХреНрд╢рди рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдореБрдЭреЗ рдкрд╛рдЧрд▓ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ 90% рдпрдХреАрди рд╣реИ рдХрд┐ рдЬрдм рдЙрдирдХреА рдПрд╕рдбреАрдХреЗ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рддрд┐рд╢рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░реЗрдЧреА, рддреЛ рд╡реЗ рдХрд╣реЗрдВрдЧреЗ "рдпрд╣реА рд╣реИ, рдлреНрд░реАрдмреА рдЦрддреНрдо рд╣реЛ рдЧрдИ рд╣реИ, рджрд╛рджреА рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░реЗрдВ"ред

рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдЕрдкрдиреЗ рдЗрдВрдЬрди рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╕рдордп рдХреА рдмрд░реНрдмрд╛рджреА рдирд╣реАрдВ рд╣реИред

рдЕрд╕рд▓ рдореЗрдВ, рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП!

рд╕рд┐рджреНрдзрд╛рдВрдд


рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ OpenCV ( рдХреИрд╕реЗ? ) рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдкрд╣рд▓реЗ рд╣реА рдХреИрдорд░реЗ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдлреНрд░реЗрдо рдореЗрдВ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд▓рд┐рдЦреА рд╣реИред рдЕрд░реНрдерд╛рддреН, рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИ:

рдЫрд╡рд┐

рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрдИ рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдиреАрдЪреЗ рдореБрдЦреНрдп рд▓рд┐рдВрдХ рджрд┐рдП рд╣реИрдВред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрд╕рд╛рдзрди OpenCV рдкреНрд░рд▓реЗрдЦрди рдкреГрд╖реНрда рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрдИ рдкрдврд╝рдиреЗ рдХреЗ рд╕рд╡рд╛рд▓ рд╣реИрдВред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, 2 рдбреА рд╣реЛрдореЛрдЧреНрд░рд╛рдлреА рд╕реЗ 3 рдбреА рд╕реНрдкреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ 2 рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛:

рдЕрднреНрдпрд╛рд╕


рдЕрднреНрдпрд╛рд╕ рдореЗрдВ, OpenGL рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ 3D рдореЙрдбрд▓ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

рдиреЛрдЯ: iOS рдореЗрдВ, рдЖрдк OpenGLES рдХреЗ 1.1 рдФрд░ 2.0 рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЦреНрдп рдЕрдВрддрд░ рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╢реЗрдбрд░реНрд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИред рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдореЗрдВ 2 рдореЗрдЯреНрд░рд┐рд╕реЗрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ, рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ:

glMatrixMode(GL_PROJECTION); glLoadMatrixf(projectionMatrix); glMatrixMode(GL_MODELVIEW); glLoadMatrixf(modelViewMatrix); 


рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ, рдЖрдк рдЙрдиреНрд╣реЗрдВ shaders рдХреЗ рдЗрдирдкреБрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

рдЕрдЧрд▓рд╛, рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреИрдорд░реЗ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдлреНрд░реЗрдо рдХрд╛ рдЖрдХрд╛рд░ рдХреИрдорд░рд╛рд╕рд╛рдЗрдЬрд╝ = (рдЪреМрдбрд╝рд╛рдИ, рдКрдВрдЪрд╛рдИ) рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреИрдорд░рд╛рд╕рд╛рдЗрдЬрд╝ = (640, 480)ред

рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреИрд╕реЗ рдХрд░реЗрдВред

рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕

рдпрд╣ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреИрдорд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдмрд╛рдж рд╡рд╛рд▓реЗ рдореЗрдВ рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд рдХреИрдорд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрддреЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреИрдорд░реЗ рдХреА рддрдХрдиреАрдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреЛрдИ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдХреИрдорд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЦреЛрдЬрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЗрд╕рдХрд╛ рдЕрдВрд╢рд╛рдВрдХрди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред OpenCV рдореЗрдВ рдЕрдВрд╢рд╛рдВрдХрди рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╡реЗрдмрдХреИрдо рдХреЛ рдСрдирд▓рд╛рдЗрди рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдХреИрдорд░реЗ рдХреЛ рдХреИрд▓рд┐рдмреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - iPhone / iPad / iPodред рдФрд░ рдпрд╣рд╛рдБ рдореИрдВ рдмрддрд╛рдП рдЧрдП рд░рд╛рд╕реНрддреЗ рдкрд░ рдЪрд▓рд╛ рдЧрдпрд╛ред

рд╣рдо рдХреИрдорд░рд╛ "рдСрдлрд▓рд╛рдЗрди" рдХреЛ рдХреИрд▓рд┐рдмреНрд░реЗрдЯ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдХреИрдорд░реЗ рдХреЗ рд╕рд╛рде рдХреИрд▓рд┐рдмреНрд░реЗрд╢рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ (рдЪреЗрдХрд░рдмреЛрд░реНрдб) рдХреА рддрд╕реНрд╡реАрд░реЗрдВ рд▓реЗрдВрдЧреЗ, рддрд╕реНрд╡реАрд░реЛрдВ рдХреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрди рддрд╕реНрд╡реАрд░реЛрдВ рд╕реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВрдЧреЗред рдХреБрдЫ рдмрд┐рдВрджреБ:

Xcode рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреИрд▓рд┐рдмреНрд░реЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬрд┐рд╕реЗ рдЖрдк рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдиреЗ OpenCV рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛ред рдпрд╛ рдЖрдк рдпрд╣рд╛рдВ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рд░реВрдкрд░реЗрдЦрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред
рддрд╕реНрд╡реАрд░реЗрдВ рдЦреБрдж, рдЖрдкрдХреЛ рд╕рдВрдХрд▓рд┐рдд рдмрд╛рдЗрдирд░реА рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдФрд░ рдХреНрд░рдо рдореЗрдВ рдирд╛рдо рдмрджрд▓реЗрдВред
рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ 2 рдлрд╛рдЗрд▓реЗрдВ рдорд┐рд▓реЗрдВрдЧреА:

рдпрджрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреБрдЫ рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрди рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рд╕рдВрднрд╡рддрдГ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдХрдо рддреАрд╡реНрд░ рдХреЛрдг рдкрд░ред OpenCV рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рднреА рдЖрдВрддрд░рд┐рдХ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдирдВрдмрд░ рд╣реЛрдиреЗ рдкрд░, рд╣рдо рдУрдкрдирдЬреАрдПрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХреНрд╖реЗрдкрдг рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 float cameraMatrix[9] = {6.24860291e+02, 0., cameraSize.width*0.5f, 0., 6.24860291e+02, cameraSize.height*0.5f, 0., 0., 1.}; - (void)buildProjectionMatrix { // Camera parameters double f_x = cameraMatrix[0]; // Focal length in x axis double f_y = cameraMatrix[4]; // Focal length in y axis (usually the same?) double c_x = cameraMatrix[2]; // Camera primary point x double c_y = cameraMatrix[5]; // Camera primary point y double screen_width = cameraSize.width; // In pixels double screen_height = cameraSize.height; // In pixels double near = 0.1; // Near clipping distance double far = 1000; // Far clipping distance projectionMatrix[0] = 2.0 * f_x / screen_width; projectionMatrix[1] = 0.0; projectionMatrix[2] = 0.0; projectionMatrix[3] = 0.0; projectionMatrix[4] = 0.0; projectionMatrix[5] = 2.0 * f_y / screen_height; projectionMatrix[6] = 0.0; projectionMatrix[7] = 0.0; projectionMatrix[8] = 2.0 * c_x / screen_width - 1.0; projectionMatrix[9] = 2.0 * c_y / screen_height - 1.0; projectionMatrix[10] = -( far+near ) / ( far - near ); projectionMatrix[11] = -1.0; projectionMatrix[12] = 0.0; projectionMatrix[13] = 0.0; projectionMatrix[14] = -2.0 * far * near / ( far - near ); projectionMatrix[15] = 0.0; } 


рдХреБрдЫ рдиреЛрдЯ:


рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЙрдбрд▓

рдЗрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, StackOverflow рдореЗрдВ рдЗрд╕ рдкреНрд░рд╢реНрди рдиреЗ рдореЗрд░реА рдорджрдж рдХреАред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, OpenCV рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реИрдВред

рддреЛ рдХреЛрдб:
 float cameraMatrix[9] = {6.24860291e+02, 0., cameraSize.width*0.5f, 0., 6.24860291e+02, cameraSize.height*0.5f, 0., 0., 1.}; float distCoeff[5] = {1.61426172e-01, -5.95113218e-01, 7.10574386e-04, -1.91498715e-02, 1.66041708e+00}; - (void)buildModelViewMatrixUseOld:(BOOL)useOld { clock_t timer; startTimer(&timer); CvMat cvCameraMatrix = cvMat( 3, 3, CV_32FC1, (void*)cameraMatrix ); CvMat cvDistortionMatrix = cvMat( 1, 5, CV_32FC1, (void*)distCoeff ); CvMat* objectPoints = cvCreateMat( 4, 3, CV_32FC1 ); CvMat* imagePoints = cvCreateMat( 4, 2, CV_32FC1 ); // Defining object points and image points int minDimension = MIN(detector->modelWidth, detector->modelHeight)*0.5f; for (int i=0; i<4; i++) { float objectX = (detector->x_corner[i] - detector->modelWidth/2.0f)/minDimension; float objectY = (detector->y_corner[i] - detector->modelHeight/2.0f)/minDimension; cvmSet(objectPoints, i, 0, objectX); cvmSet(objectPoints, i, 1, objectY); cvmSet(objectPoints, i, 2, 0.0f); cvmSet(imagePoints, i, 0, detector->detected_x_corner[i]); cvmSet(imagePoints, i, 1, detector->detected_y_corner[i]); } CvMat* rvec = cvCreateMat(1, 3, CV_32FC1); CvMat* tvec = cvCreateMat(1, 3, CV_32FC1); CvMat* rotMat = cvCreateMat(3, 3, CV_32FC1); cvFindExtrinsicCameraParams2(objectPoints, imagePoints, &cvCameraMatrix, &cvDistortionMatrix, rvec, tvec); // Convert it CV_MAT_ELEM(*rvec, float, 0, 1) *= -1.0; CV_MAT_ELEM(*rvec, float, 0, 2) *= -1.0; cvRodrigues2(rvec, rotMat); GLfloat RTMat[16] = {cvmGet(rotMat, 0, 0), cvmGet(rotMat, 1, 0), cvmGet(rotMat, 2, 0), 0.0f, cvmGet(rotMat, 0, 1), cvmGet(rotMat, 1, 1), cvmGet(rotMat, 2, 1), 0.0f, cvmGet(rotMat, 0, 2), cvmGet(rotMat, 1, 2), cvmGet(rotMat, 2, 2), 0.0f, cvmGet(tvec, 0, 0) , -cvmGet(tvec, 0, 1), -cvmGet(tvec, 0, 2), 1.0f}; cvReleaseMat(&objectPoints); cvReleaseMat(&imagePoints); cvReleaseMat(&rvec); cvReleaseMat(&tvec); cvReleaseMat(&rotMat); printTimerWithPrefix((char*)"ModelView matrix computation", timer); } 

рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ 4 рдЬреЛрдбрд╝реЗ рдФрд░ рдлреНрд░реЗрдо рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдлреНрд░реЗрдо рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдмрд┐рдВрджреБ рдЪрддреБрд░реНрднреБрдЬ рдХреЗ рдХреЛрдиреЗ рд╣реИрдВ рдЬреЛ рдлреНрд░реЗрдо рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ (рдмрд╛рдЙрдВрдбрд┐рдВрдЧ) рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рдмрд┐рдВрджреБ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рд╡рд░реНрддрди H рдХреА рд╣реЛрдореЛрдЧреНрд░рд╛рдлрд╝реА рд╣реЛрдиреЗ рдкрд░, рдЖрдк рдЗрд╕ рд╣реЛрдореЛрдЧреНрд░рд╛рдлрд╝реА рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЪрд░рдо рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдЫрд╡рд┐

рд╡рд╕реНрддреБ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреБрдЫ рдмрд┐рдВрджреБ рд╕реНрд╡рдпрдВ рд╣реИрдВ:

рдирд┐рд░реНрдорд┐рдд рдореИрдЯреНрд░рд┐рд╕реЗрд╕ cvFindExtrinsicCameraParams2 рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╡рд╣ рд╣рдореЗрдВ рдПрдХ рд░реЛрдЯреЗрд╢рди рд╡реЗрдХреНрдЯрд░, рдФрд░ рдПрдХ рдЯреНрд░рд╛рдВрд╕рдлрд░ рд╡реЗрдХреНрдЯрд░ рдмрдирд╛рдПрдЧреАред рд░реЛрдЯреЗрд╢рди рд╡реЗрдХреНрдЯрд░ рд╕реЗ рд╣рдореЗрдВ рд░реЛрдЯреЗрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ cvRodrigues2 рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд░реЛрдЯреЗрд╢рди рд╡реЗрдХреНрдЯрд░ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рдХрд░ рджреВрд╕рд░реЗ рдФрд░ рддреАрд╕рд░реЗ рддрддреНрд╡реЛрдВ рдХреЛ 1 рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рд╣реИ рд╡рд╣ OpenGL рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбрд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, OpenGL рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкреЛрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рд╕рдм рд╣реИ, рд╣рдо рдЕрд╕реНрдерд╛рдпреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдореЙрдбрд▓ рдХрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░


рджреЛ рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛрдиреЗ рдкрд░, рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ GLView рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╣рд╛рдВ рдореЙрдбрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдореЙрдбрд▓ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЦреЛрдЬрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп iPhone 4 рдкрд░ 10 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдкрдХреА рдорд╛рдиреНрдпрддрд╛ рдХреЗ FPS рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдФрд░ рдЬрд╛рдиреЗрдВ:


1.http : //old.uvr.gist.ac.kr/wlee/web/techReports/ar/Camera%20Models.html
2. http://www.hitl.washington.edu/artoolkit/mail-archive/message-thread-00653-Re--Questions-concering-.html
3.http: //sightations.wordpress.com/2010/08/03/simulating-calibrated-cameras-in-engengl/
4.http : //www.songho.ca/opengl/gl_projectionmatrix.html

Source: https://habr.com/ru/post/In139429/


All Articles