3D рдмрд┐рдВрджреБ рдмрд╛рджрд▓реЛрдВ рдХреЗ 2D рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ рдЕрдгреНрдбрд╛рдХрд╛рд░ рдЖрд░реНрдХреНрд╕ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП OpenCV рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

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

рдХреЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗрд╡рд▓ рдирд┐рд░реНрдорд┐рдд, рдкреБрд░рд╛рдиреЗ рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╛рдЗрди рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдФрд░ рдмреЗрд▓рдирд╛рдХрд╛рд░ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреА рдЕрдиреНрдп рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред 3 рдбреАрдУрдЯреА рдореЗрдВ рдЬреНрдпрд╛рдорд┐рддреАрдп рдЖрджрд┐рдо рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП , рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ 3 рдбреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдкреАрд╕реАрдПрд▓ , рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

ред рдлрд╛рдпрджреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдиреБрдХрд╕рд╛рди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдореМрдЬреВрджрд╛ рдХрдбреЛрд╡ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЬрд┐рдирдореЗрдВ рдЖрдорддреМрд░ рдкрд░ 2 рдбреА рдЖрдпрд╛рдо рд╣реЛрддрд╛ рд╣реИред

рдХреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХреИрд╕реЗ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд░рддреЗ рд╣реИрдВ 3dOT , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрдореНрдкрд┐рдВрдЧ рд╕реНрдЯреЗрд╢рди, 2 рдбреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдФрд░ 2 рдбреА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг, рдЬреЛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреА рдкреВрд░реА рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ OpenCV ред


рдЪрд┐рддреНрд░рд╛ 1. рдПрдХ рдкрдВрдк рд╕реНрдЯреЗрд╢рди рдХреЗ 3 рдбреА рдУрдЯреА рдореЙрдбрд▓

рд╡рд┐рднрд┐рдиреНрди рдкрд╛рдЗрдк рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╕реНрдХреИрди рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рдЕрдиреБрднрд╛рдЧреЛрдВ рдХрд╛ рдореБрдЦреНрдп рддрддреНрд╡ рдЕрдгреНрдбрд╛рдХрд╛рд░ рдЪрд╛рдк рд╣реИрдВ ред


рдЪрд┐рддреНрд░рд╛ 2. рдФрд╕рдд рд╕реНрддрд░ рдкрд░ рдПрдХ рдкрдВрдкрд┐рдВрдЧ рд╕реНрдЯреЗрд╢рди рдХреЗ 3 рдбреА рдореЙрдбрд▓ рдХрд╛ рдХреНрд╖реИрддрд┐рдЬ рдХреНрд░реЙрд╕ рд╕реЗрдХреНрд╢рдиред

рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдПрдХ рдкреНрд░рдореБрдЦ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рддрдХ рд╕реАрдорд┐рдд рд░рдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЕрдгреНрдбрд╛рдХрд╛рд░ рдЖрд░реНрдХреНрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ - рдпрд╣ рдЖрд░реНрдХ рд╕реЗрдЧрдореЗрдВрдЯ рдФрд░ рдХреНрд╖реЗрддреНрд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ ( рдХреНрд╖реЗрддреНрд░ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдмрдврд╝рдд рд▓рд┐рдВрдХрд┐рдВрдЧ ) рдХреА рд╡реГрджреНрдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ ред

рд╡рд┐рдХрд╛рд╕ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд, рдпрджреНрдпрдкрд┐ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓реА рд╣реИрдВ, рдЬреЛ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдЕрдиреБрдХреВрд▓ рд╣реИрдВ рдЬрдм рджреГрд╢реНрдп рдореЗрдВ рд╢рд┐рдерд┐рд▓ рдпреБрдЧреНрдорд┐рдд, рджреВрд░ рдХреА рд╡рд╕реНрддреБрдПрдВ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдПрдХ рджреАрд░реНрдШрд╡реГрддреНрдд рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрддреА рд╣реИрдВред рдЗрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред


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

рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдЫрд╡рд┐ рдореЗрдВ рдПрдХ рдЕрдгреНрдбрд╛рдХрд╛рд░ рдЪрд╛рдк рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ (рдкрд╣рдЪрд╛рдирдиреЗ, рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдпрд╛рдиреА рджреАрд░реНрдШрд╡реГрддреНрдд рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рджреАрд░реНрдШрд╡реГрддреНрдд рдЪрд╛рдк рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдФрд░ рдЕрдВрддрд┐рдо рдХреЛрдг рдХреА рдЧрдгрдирд╛), рдЬреЛ рдмрд╛рджрд▓ рдХреЗ рдХреНрд╖реИрддрд┐рдЬ рдЦрдВрдб рд╕реЗ рдмрд╛рд╣рд░ рдХреА рдУрд░ рд╣реИред


рдЪрд┐рддреНрд░рд╛ 3. 3 рдбреА рдореЙрдбрд▓ рдХреЗ рдХреНрд░реЙрд╕ рд╕реЗрдХреНрд╢рди рдХреЗ рдЕрдгреНрдбрд╛рдХрд╛рд░ рдЪрд╛рдк рдореЗрдВ рд╕реЗ рдПрдХ (рдЪреМрд░рд╕рд╛рдИ рдХреЗ рдмрд╛рдж)

рдиреЗрддреНрд░рд╣реАрди рд░реВрдк рд╕реЗ рд░реЗрдЦрд╛рдкреБрдВрдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░реЗрдЦрд╛рдкреБрдВрдЬ рдХреЗ рд╕рд╛рде рд╕рднреА рд╕рдВрдЪрд╛рд▓рди рдХрд░реЗрдВрдЧреЗ ред

OpenCV findContours рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд░реИрд╕реНрдЯрд░ рдореИрдЯ рдкрд░ рд╕рднреА рдмрд╛рд╣рд░реА (рдЖрдВрддрд░рд┐рдХ рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛) рдкреВрд░реНрдгрд╛рдВрдХ рдмрд┐рдВрджреБ рд╡реИрдХреНрдЯрд░ рдХреЗ рдПрдХ рд╡реЗрдХреНрдЯрд░ (рд░реЗрдЦрд╛рдкреБрдВрдЬ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ ) рдХреЗ рд░реВрдк рдореЗрдВ рдорд┐рд▓рддреА рд╣реИ :
 Mat mat(size);
 vector<vector<Point>> contours;
 findContours(mat, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);

рдпрд╣ рд╣рдорд╛рд░рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдСрдкрд░реЗрд╢рди рд╣реИ, рдЬреЛ рдХреБрдЫ рд╕рд░рд▓ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ ред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдкрддрд┐рдд рдорд╛рдорд▓реЗ рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдореЛрдЪреНрдЪ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред OpenCV рдлрд╝рдВрдХреНрд╢рди

рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореМрдЬреВрджрд╛ рдмрд╛рд╣рд░реА рд╕рд░реНрдХрд┐рдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рд░реЗрдЦрд╛рдкреБрдВрдЬ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд░рд┐рд╡рд░реНрд╕ рдСрдкрд░реЗрд╢рди рднреА рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИ:
 drawContours(mat, contours, -1, Scalar(255), -1);

рдпрд╣ рднреА рдЕрдХреНрд╕рд░ рдЖрдХреГрддрд┐ рдХреЛ рдореБрдЦреМрдЯрд╛ рдмрдирд╛рдиреЗ, рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ, рдпрд╛ рдХреНрд╖реЗрддреНрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреИрдЪ (рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рдХреНрд░ рдХреЗ рдЯреБрдХрдбрд╝реЗ) рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╛рд╕реНрдЯрдирд░реЛрдВ) рдпрд╛ рдСрдкреНрдЯрд┐рдХрд▓ рд╢реЛрд░ рдХреЗ рд╕реНрдХреИрдирд┐рдВрдЧ рдФрд░ рдЕрдиреНрдп рдХреЗ рджреМрд░рд╛рди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдСрдкреНрдЯрд┐рдХрд▓ рд╢реЛрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИред рдХрд╛рд░рдгреЛрдВред

рдЖрдЗрдП рдПрдХ рд╡рд┐рднреЗрджрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ рдЬреЛ рд╕рдореЛрдЪреНрдЪ рдХреЗ рдкреНрд░рдХрд╛рд░ (рджреАрд░реНрдШрд╡реГрддреНрдд, рд░реИрдЦрд┐рдХ рдЦрдВрдб, рд╣реИрдЪрд┐рдВрдЧ рдпрд╛ рдХреБрдЫ рдФрд░) рдХреЛ рд▓реМрдЯрд╛рдПрдЧрд╛, рд╕рд╛рде рд╣реА рд╕рдореЛрдЪреНрдЪ рдХреЗ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдФрд░ рдЗрд╕рдХреЗ рдШреБрдорд╛рдП рдЧрдП рд░реВрдкрд░реЗрдЦрд╛ рдЖрдпрдд:
 contourTypeSearch(
   const vector<Point> &contour, Vec4i &def, RotatedRect &rc);

рдЖрдпрдд рдХреА рд▓рдВрдмрд╛рдИ рдФрд░ рдЪреМрдбрд╝рд╛рдИ рдХрд╛ рдЕрдиреБрдкрд╛рдд рд░реЗрдЦреАрдп рдЦрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЫреЛрдЯреЗ рд╢реЛрд░ рдЖрдХреГрддрд┐ рдХреЗ рдХрд░реАрдмрд┐рдпреЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рднреЗрджрднрд╛рд╡ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ ред OpenCV

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

рдорд╛рд╕реНрдХрд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдореВрд▓ рдЫрд╡рд┐ рд╕реЗ рдирд┐рдХрд╛рд▓реА рдЧрдИ рднреЗрджрднрд╛рд╡рдкреВрд░реНрдг рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХрддрдо рджреЛрд╖ рджреЗрддрд╛ рд╣реИ :
 contourConvFeature(mat, &def, тАж );

рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдореБрдЦреНрдп рдХреЛрдб рджреЛ OpenCV рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИ :

 vector<int> *hull = new vector<int>();
 convexHull(contour, *hull);
 vector<Vec4i> *defs = new vector<Vec4i>();
 convexityDefects(contour, *hull, *defs);

рдкрд╣рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЕрдзреНрдпрдпрди рдХреЗ рддрд╣рдд рд╕рдореЛрдЪреНрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрддрд▓ рдмрд╣реБрднреБрдЬ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рджреВрд╕рд░рд╛ - рд╕рднреА рдЙрддреНрддрд▓ рджреЛрд╖реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ ред

рд╣рдо рдЙрддреНрддрд▓рддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рджреЛрд╖ рд▓реЗрддреЗ рд╣реИрдВ , рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рд╕рдореЛрдЪреНрдЪ рдХреЗ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╕рдореЛрдЪреНрдЪ рдХреА рдмрд╛рд╣рд░реА рдпрд╛ рдЖрдВрддрд░рд┐рдХ рд╕реАрдорд╛рдУрдВ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рддреЛ рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ред рдЙрдиреНрд╣реЗрдВ рд╕реБрдЪрд╛рд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рд╣рдо рдЕрдзреНрдпрдпрди рдХреЗ рддрд╣рдд рд╕рдореЛрдЪреНрдЪ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЪреМрд░рд╕рд╛рдИ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ (рдФрд░ рд╕рдВрдкреВрд░реНрдг рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рддрд╛рдХрд┐ рд╕рдореЛрдЪреНрдЪ рдХреЗ рдмреАрдЪ isthmuse рдХреЛ "рдзреБрдВрдзрд▓рд╛" рди рдХрд░реЗрдВ рдФрд░ рдореВрд▓ рдЯреЛрдкреЛрд▓реЙрдЬреА рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рди рдХрд░реЗрдВ)ред


рдЪрд┐рддреНрд░рд╛ 4. рдЙрднрд╛рд░ рджреЛрд╖ рдХреА рдЧрдгрдирд╛ред

рд╡рд┐рдХрд▓реНрдк (рдП) рдЧрд▓рддреА рд╕реЗ рд▓рд╛рд▓ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдХрд▓реНрдк (рдмреА)рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдХрд▓реНрдк (рд╕реА) рдореВрд▓ рдЖрдХреГрддрд┐ рдкрд░ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдЬреЛ рддрдХрдиреАрдХ рдЕрдкрдирд╛рдИ рд╣реИ, рдЙрд╕рдореЗрдВ рд╕рд░реНрдХрд┐рдЯ рдХреЛ рд╣рд░ рдмрд╛рд░ рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рд╣рдореЗрдВ рд╕рдВрдкреВрд░реНрдг рдЦреЛрдЬ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдкрддреНрд░рд╛рдЪрд╛рд░ (рдпрд╛ рдмрд▓реНрдХрд┐, рдЙрдирдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ) рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛ :
 nearestContourPtIdx(const vector<Point> &contour, const Point& pt);

рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдм рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдЪрд╛рдк рдЬреБрджрд╛рдИ рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЛрдб рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЖрдВрддрд░рд┐рдХ / рдмрд╛рд╣рд░реА рдЪрд╛рдк рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ рд╕реЗ рдХрд╛рдо)ред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рд╕рдореЛрдЪреНрдЪ рдХрд╛ рдмрд╛рд╣рд░реА рдЪрд╛рдк рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдВрдкрд░реНрдХ рдореЗрдВ рд╣реИ рдпрд╛ рд╢реЛрд░ рд╣реИ ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдЖрдВрддрд░рд┐рдХ рдЪрд╛рдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд╛рд╣рд░реА рдФрд░ рдЖрдВрддрд░рд┐рдХ рдЖрд░реНрдХреНрд╕ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪрд╛рдк рдХреА рдЙрддреНрддрд▓рддрд╛ рдХреЗ рдЕрдиреБрдкрд╛рдд рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рд┐рджреНрдз рд╕реВрддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╡реГрддреНрдд рдХреА рддреНрд░рд┐рдЬреНрдпрд╛ рд▓рдЧрднрдЧ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИ рдФрд░ рдмрд╣реБрдд рдмрдбрд╝реЗ рджреАрд░реНрдШрд╡реГрддреНрддрд╛рдХрд╛рд░ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдП рдЧрдП рд╣реИрдВ:
R = bulge / 2 + SQR(hypot) / (8 * bulge);

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рднреА рдЖрдХреГрддрд┐ рдХреЗ рд▓рд┐рдП, рдЙрдирдХреЗ рдЙрддреНрддрд▓ рджреЛрд╖ рдореАрдЯреНрд░рд┐рдХ рдкрд╛рдП рдЧрдП (рдпрд╛ рдЙрдиреНрд╣реЗрдВ рд░реИрдЦрд┐рдХ рдпрд╛ рдЫреЛрдЯреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдЕрдВрддрд┐рдо рдЪрд░рдг рдореЗрдВ, рдореВрд▓ рдореАрдЯреНрд░рд┐рдХ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдШреБрдорд╛рдП рдЧрдП рдЖрдпрд╛рдо рдкреИрд░рд╛рдореАрдЯрд░, рдЖрджрд┐, рдФрд░ рдЕрдзреНрдпрдпрди рдХреЗ рддрд╣рдд рдореАрдЯреНрд░рд┐рдХ рдХрд╛ рдкреВрд░рд╛ рд╕реЗрдЯ рдЖрдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред
 typedef tuple<int , // 
   RotatedRect, //  
   Vec4i, //  
   int> // 
   RectDefMetric;


рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЪрд╛рдк рдЦрдВрдбреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо


рд╡рд┐рдХрд╛рд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ: рд╣рдо рдПрдХ рдмреАрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд╕рдореЛрдЪреНрдЪ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдирд┐рдХрдЯрддрдо рдкреИрдЪ рдХреЛ рдЗрд╕рдХреЗ рдЕрдВрдд рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рдвреВрдВрдврддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрд▓рдЧреНрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рдХрд╛рд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдмрдврд╝реА рд╣реБрдИ рдЖрдХреГрддрд┐ рдореЗрдВ, рд╣рдо рд╡рд╛рдВрдЫрд┐рдд рдЕрдгреНрдбрд╛рдХрд╛рд░ рдЪрд╛рдк рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ ред рдорд╛рд╕реНрдХ рдФрд░ рдореВрд▓ рд╕реЗрдЯ рд╕реЗ рдЖрдВрдХрдбрд╝рд╛ рдШрдЯрд╛рдирд╛ ред рд╣рдо рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рддрдм рддрдХ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╢реБрд░реБрдЖрддреА рд╕реЗрдЯ рдЦрддреНрдо рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ ред

рд╡рд┐рдХрд╛рд╕ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреА рдореВрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
 vector<Point> *patch =
    growingContours(contour, def, tmp, hull);

рдЬрд╣рд╛рдВ рд╕рдореЛрдЪреНрдЪ рдЕрдзреНрдпрдпрди рдХреЗ рддрд╣рдд рд╕рдореЛрдЪреНрдЪ рд╣реИ, рдбреАрдИрдПрдлрд╝ рдЗрд╕рдХреЗ рдЙрддреНрддрд▓рддрд╛ рджреЛрд╖ рд╣реИ, рдкрддрд╡рд╛рд░ рдкреВрд░реЗ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрддреНрддрд▓ рдмрд╣реБрднреБрдЬ рд╣реИ, tmp рд╕рд╣рд╛рдпрдХ рдмрдлрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИред рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдмрдбрд╝рд╛ рдХрдВрдЯреВрд░ рдорд┐рд▓рддрд╛ рд╣реИред

рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдмреАрдЬ рд╡реГрджреНрдзрд┐ рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХрд╛ рдПрдХ рдЪрдХреНрд░ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдкреИрдЪ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдХреЗ рдпрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реЛрддрд╛ рд╣реИ ред


рдЪрд┐рддреНрд░рд╛ 5. рдмреАрдЬ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреИрдЪ

рдореБрдЦреНрдп рдХрдард┐рдирд╛рдИ рд╕рдореЛрдЪреНрдЪ рдХреЗ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдХрдЯрддрдо рдкреИрдЪ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реИ , рддрд╛рдХрд┐ рдЖрдВрдХрдбрд╝рд╛ рдХреЗрд╡рд▓ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИ ред рдХреЗ рд▓рд┐рдП рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рджрд┐рд╢рд╛рд╣рдо рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЪрд╛рдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдФрд╕рдд рд▓рд╛рдЗрди рд▓реЗрддреЗ рд╣реИрдВред рдореЗрдВ рдЪрд┐рддреНрд░рд╛ 6 рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдпрд╛рддреНрд░рд╛ рдкрд░ рдмреАрдЬ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВред


рдЪрд┐рддреНрд░рд╛ 6. рд╡рд┐рдХрд╛рд╕ рдкреНрд░рддреНрдпрд╛рд╢реА рдкреИрдЪ рдХреА рдмрд╣реБрд▓рддрд╛ рд╕реЗ рдШрд┐рд░рд╛ рдмреАрдЬред

рдкреНрд░рддреНрдпреЗрдХ рдЙрдореНрдореАрджрд╡рд╛рд░ рдкреИрдЪ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореАрдЯреНрд░рд┐рдХ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ:
typedef tuple<
   double, //    2      2   
   bool, bool, //,  4   
   int, // 
   Vec4i> //  
   DistMetric;

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

рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рдЕрдгреНрдбрд╛рдХрд╛рд░ рдЪрд╛рдк рдорд┐рд▓рд╛ , рдЬрд┐рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдмрд╛рдХреА рд╣реИред

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ OpenCV рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рд╡рд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬреЛ рд╣рдорд╛рд░рд╛ рдкреИрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ (рдПрдХ рдкрде рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдореЗрдВ рдпрд╛рдж рд╣реИ рдХрд┐ рдкрде рдФрд░ рд░реЗрдЦрд╛рдкреБрдВрдЬ рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╡рд┐рдирд┐рдореЗрдп рд╣реИрдВ) рдФрд░ рдШреБрдорд╛рдП рдЧрдП рдЖрдпрд╛рдо , рдпрд╛рдиреА рдПрдХ рдкреВрд░реНрдг рджреАрд░реНрдШрд╡реГрддреНрдд рд▓реМрдЯрд╛рддрд╛ рд╣реИред
 RotatedRect box = fitEllipse(patch);

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

рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЬреНрдЮрд╛рдд рджреАрд░реНрдШрд╡реГрддреНрдд рдХреЗ рд╢реЗрд╖ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рддреЗ рд╣реИрдВ - рдкреНрд░рд╛рд░рдВрдн рдФрд░ рдЕрдВрдд рдХреЛрдг (рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдлрд┐рдЯ рд╕реЗ рдЖрдзреЗ рдЕрдХреНрд╖ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ )ред

рд╢реБрд░реБрдЖрддреА рдФрд░ рдЕрдВрдд рдХреЗ рдХреЛрдгреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ: рд╣рдо рдЕрдкрдиреЗ рдкреВрд░реНрдг рджреАрд░реНрдШрд╡реГрддреНрдд рдХреЛ рд╡рд╛рдкрд╕ рдмрд╣реБрднреБрдЬ рдореЗрдВ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ , рдФрд░ рдкреНрд░рддреНрдпрдХреНрд╖ рдЧрдгрдирд╛ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдЕрдкрдиреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЕрдкрдиреЗ рд╕рд┐рд░реЛрдВ рдХреЗ рд╕рдмрд╕реЗ рдХрд░реАрдм рдкрд╛рддреЗ рд╣реИрдВред рдЙрдирдХреЗ рдХреЛрдгреАрдп рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ(рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реВрдЪрдХрд╛рдВрдХ) рдФрд░ рдПрдХ рдЕрдгреНрдбрд╛рдХрд╛рд░ рдЪрд╛рдк рдХреЗ рд╢реБрд░реБрдЖрддреА рдФрд░ рдЕрдВрдд рдХреЗ рдХреЛрдг рд╣реЛрдВрдЧреЗред рдХреЛрдб рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ (рдереЛрдбрд╝рд╛ рд╕рд░рд▓реАрдХреГрдд):
 pair<int, int>
   ellipseAngles(const RotatedRect &box,
   vector<Point> &ell, const Point &ps, 
   const Point &pe, const Point &pm) 
 {
    vector<Point> ell0;
    ellipse2Poly(Point(box.center.x, box.center.y), 
      Size(box.size.width / 2, box.size.height / 2),
      box.angle, 0, 355, 5, ell0);
    int i0 = nearestContourPtIdx(ell0, ps);
    int i1 = nearestContourPtIdx(ell0, pe);
    cutSides(ell0, i0, i1, i2, ell, nullptr);
    return pair<int, int>(i0, i1);
}

рд╣рдорд╛рд░реА рдХрдЯрд╕рд╛рдЗрдбреНрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдгреНрдбрд╛рдХрд╛рд░ рдЪрд╛рдк рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдЯреЛрдкреЛрд▓реЙрдЬреА рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреА рд╣реИ ред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ i0, i1, i2 рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдиреЗ рдХреЗ рдЖрда рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдорд▓реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ред рдХреНрдпрд╛ рд╣рдо рдмрд╛рд╣рд░реА рд╕рдореЛрдЪреНрдЪ рдпрд╛ рдЖрдВрддрд░рд┐рдХ рдПрдХ рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдХреМрди рд╕рд╛ рд╕реВрдЪрдХ рдЕрдзрд┐рдХ, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдпрд╛ рдЕрдВрддрд┐рдо рд╣реИ?

рдХреЛрдб рджреЗрдЦрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди:
 void cutSides(
   const vector<Point> &ell0, int i0, int i1, int i2, 
   vector<Point> *ell_in, vector<Point> *ell_out)
 {
   if (i0 < i1) {
      if (i2 > i0 && i2 < i1) {
         if (ell_in) {...}
            if (ell_out) {...}
        } else {
            if (ell_in) {...}
            if (ell_out) {...}
        }}
    else {
        if (i2 > i1 && i2 < i0) {
            if (ell_in) {...}
            if (ell_out) {...}
        } else {
            if (ell_in) {...}
            if (ell_out) {...}
        }}}

рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рджреАрд░реНрдШрд╡реГрддреНрдд рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдХреБрдЫ рдкрд░рд┐рдгрд╛рдо рдЪрд┐рддреНрд░ 7 рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВ ред



рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВ, рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкрд╣рдЪрд╛рди рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

All Articles