рд▓реЗрдЦ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЙрдкрдпреЛрдЧреА рд╣реИред рд╣рдо, "рдЧрд╣рд░реА рд╕рдВрддреБрд╖реНрдЯрд┐ рдХреА рднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде" рдиреЗ рдХрд╣рд╛ рдХрд┐ рдПрдмреАрдмреАрд╡рд╛рдИ рдЙрд╕реА рдЧрдгрд┐рддреАрдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рд╣рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╡рд┐рд╡реЗрдХрдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдХреБрдЫ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рд╕реАрдорд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреА рд╕рдЯреАрдХрддрд╛ рдХрд╛рдлреА рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдХреБрдЫ рдкрд╛рдардХреЛрдВ рдиреЗ рдПрдХ рдЙрдЪрд┐рдд рд╕рд╡рд╛рд▓ рдХрд┐рдпрд╛ рдерд╛: "рдЪрд┐рддреНрд░ рдореЗрдВ рдкрд╛рдП рдЧрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?" рдореИрдВ рдЪреЗрд╢рд╛рдпрд░ рдХреИрдЯ рдПрд▓рд┐рд╕ рдХреЗ рд╢рдмреНрджреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреВрдВрдЧрд╛: "рдЖрдк рдХрд╣рд╛рдБ рдЖрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?" рдпрджрд┐ рдЕрдВрддрд┐рдо рд▓рдХреНрд╖реНрдп рддрд╕реНрд╡реАрд░ рд╕реЗ "рдирд┐рдХрд╛рд▓рдирд╛" рдкрд╛рда рд╣реИ? рдбреЗрдЯрд╛, рддреЛ рдЖрдкрдХреЛ рдкрд╣рдЪрд╛рди рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рд╡рд┐рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рд╕рднреА рддрд╕реНрд╡реАрд░реЛрдВ рдХрд╛ "рд╣рд╛рде рд╕реЗ"ред рдпрджрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рдбреЗрдЯрд╛ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХреИрдкреНрдЪрд╛ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЫреЛрдЯреА рдХреАрдордд рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдХреИрдкреНрдЪрд╛ рдкрд░ рдорд╢реАрди рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рдХреА рдЬреАрдд рдореЗрдВ "рд╡рд┐рд╢реНрд╡рд╛рд╕рд┐рдпреЛрдВ" рдиреЗ рдирд┐рдпрдорд┐рддрддрд╛ рдХреЗ рд╕рд╛рде рдлреНрд░реАрд▓рд╛рдВрд╕ рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рджрд┐рдЦрд╛рдИред рдзрдиреНрдп рд╣реИ рд╡рд╣ рдЬреЛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЕрдм рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо ABBYY рд╕реЗ рдмреИрдЯрди рд▓реЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдиреБрднрд╡ рд╕реЗ рд╣рдореЗрдВ рдмрддрд╛рдПрдБрдЧреЗ рдХрд┐ рдкреНрд░рд┐рдЬрд╝рдореИрдЯрд┐рдХ рдХреЛ рдХреИрд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рдП, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдиреНрдпреВрдирддрдо рд▓рд╛рдЧрддреЛрдВ рдХреЗ рд╕рд╛рде рдЫрд╡рд┐ рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ (рд╡рд┐рдЬреНрдЮрд╛рди рдХреЗ рд▓рд┐рдП ABBYY рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж), рдЕрдзрд┐рдорд╛рдирддрдГ рдкрд░рд┐рд░рдХреНрд╖рдг рдХреЗ рд╕рд╛рдеред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрдиреБрдкрд╛рддред рд╡рд┐рджреЗрд╢реА рдорд╛рдорд▓реЗ, рдЬреИрд╕реЗ рдХрд┐ рдкреЗрдВрдЯрд╛рдЧрди рдпрд╛ рдЕрдВрдбрд╛рдХрд╛рд░ рджрд╕реНрддрд╛рд╡реЗрдЬ, рд╣рдо рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд╡рд╛рд▓ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред
рдЖрд╢рд╛рдЬрдирдХ рд╡рд┐рдХреГрддрд┐рдпреЛрдВ рдХреА рд╡рд┐рдХреГрддрд┐ рдХреА рд╕рдорд╕реНрдпрд╛ ALANIS рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рдЙрд╕ рдкрдХреНрд╖ рд╕реЗ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реБрдИ, рдЬрд╣рд╛рдБ рд╕реЗ рдХреЛрдИ рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдпрд╣ рддрдереНрдп рдХрд┐ рд╣рдо рдореЛрдмрд╛рдЗрд▓ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХ, рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╣рдо рдХреИрдирди рдИрдУрдПрд╕ рдбрд┐рдЬрд┐рдЯрд▓ рдПрд╕рдПрд▓рдЖрд░ рдХреИрдорд░реЛрдВ (рд╣рд╛рдп, рдлреЛрдЯреЛрдЧреНрд░рд╛рдлрд░реЛрдВ!) рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЧреНрд░рд╣реЛрдВ рдХреЗ рд╕реНрдХреИрдирд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреИрдирд┐рдВрдЧ рдФрд░ рдЗрдореЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреБрдЫ рд╕рдордп рдореЗрдВ, рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рдореЗрдВ рдРрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЪрд╛рд╣рддреЗ рдереЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕рдорд╛рдкреНрдд рдХреИрдорд░рд╛ рдЫрд╡рд┐ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рд▓рд╛рдЗрд╡ рд╡реНрдпреВ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдЪрд░рдг рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдордиреЗ рдЬреЛ рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдП рдЧрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╕реБрдзрд╛рд░ рдореЛрдб рдореЗрдВ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рджрд┐рдП рдЧрдП:
- рдПрдХ рдЖрдпрддрд╛рдХрд╛рд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рд╡рд┐рдХреГрдд рдЫрд╡рд┐
- рдЪрд┐рддреНрд░ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдЖрдХреГрддрд┐
рдЙрджреНрджреЗрд╢реНрдп:
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдЙрд╕рдХреЗ рдореВрд▓ рд░реВрдк рдореЗрдВ рд╕рдмрд╕реЗ рдХрдо рддрд░реАрдХреЗ рд╕реЗ рд╡рд╛рдкрд╕ рд▓рд╛рдПрдВ
рдЪреБрдиреМрддреА (рд░реВрд╕реА рд╕рдордХрдХреНрд╖ рдХрд┐рд╕реА рддрд░рд╣ рдШрдЯрд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ):
- рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рдЕрдиреБрдкрд╛рдд рд╣рдореЗрдВ рдареАрдХ рд╕реЗ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИрдВ
- рдЙрд╕ рд╡рд┐рдорд╛рди рдХреА рджреВрд░реА рдЬрд┐рд╕ рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд┐рд╣рд┐рдд рд╣реИ, рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ
- рдРрд╕реА рдХреЛрдИ рд╕рдВрджрд░реНрдн рд╡рд╕реНрддреБ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЖрдк рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╣реА рд╡рд░реНрдЧ рдЬреЛ рд▓реЗрдВрд╕ рдореЗрдВ рдЧрд┐рд░ рдЧрдпрд╛)
рд╕рдорд╛рдзрд╛рди:
рдЗрд╕рд▓рд┐рдП, рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдВрдкреВрд░реНрдг рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рднрд╛рдЧреЛрдВ рдореЗрдВ рддреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ:
- рдвреВрдБрдврдирд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реНрдХреИрди рдХреА рдЧрдИ рдЫрд╡рд┐ рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рд╡рд┐рдХреГрдд рд░реВрдкрд░реЗрдЦрд╛ (рд╢рд╛рдпрдж, рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╡рд░ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдПрдмреАрдмреАрд╡рд╛рдИ рд▓реЗрдЦ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ)ред
- рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╕рд╣реА рдЕрдиреБрдкрд╛рдд рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдирд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕рдВрд░реЗрдЦрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╡рд┐рдХреГрдд рд░реВрдкрд░реЗрдЦрд╛ рдХреЛ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдХ рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдЕрднреА рднреА рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдЕрдкрдирд╛рдпрд╛ рдФрд░ рдУрдкрдирд╕реАрд╡реА рдЯреВрд▓рдХрд┐рдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рд╣рдо рдЬреНрдпрд╛рджрд╛рддрд░ C # Wrapper OpenCVSharp рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ .NET рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред OpenCVSharp рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ Nuget рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИред "рдпрд╣ рд╕рдм рд╣реИ" (рд╕реА) рдФрд░ рд╣рдо рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВрдЧреЗред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЫрд╡рд┐ рдореЗрдВ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдЫрд╡рд┐ рдХреЛ рд╕рд╣реА рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдореБрдЦреНрдп рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
1. рдкреНрд░рд╕реНрддреБрдд рдЫрд╡рд┐ рдореЗрдВ рд╕рдореЛрдЪреНрдЪ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЫреЛрдЯреЗ рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХрдо рдмрд┐рдЬрд▓реА рдЧреЙрд╕рд┐рдпрди рдХреЗ "рдмреНрд▓рд░ рд╕реНрдкреЗрд▓" рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рдЫрд╡рд┐ рдХреЛ рдЧреНрд░реЗ рдХреЗ рд░рдВрдЧреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ:
imgSource.CvtColor(imgGrayscale, ColorConversion.BgrToGray);
imgSource.Smooth(imgSource, SmoothType.Gaussian, 15);
рдЙрдкрд░реЛрдХреНрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдРрд╕рд╛ рд╣реБрдЖ рд╣реИ (рдпрджрд┐ рдореИрдВ рдЕрдкрдирд╛ рдЪрд╢реНрдорд╛ рдЙрддрд╛рд░рддрд╛ рд╣реВрдВ, рддреЛ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдкреНрд░рднрд╛рд╡ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдиреИрддрд┐рдХ: "рдорд╛рдпреЛрдкрд┐рдпрд╛ рдПрдХ рдмреАрдорд╛рд░реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдмреМрджреНрдзрд┐рдХ рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕рдм рдХреБрдЫ рдмрд╣рд╛рдирд╛ рдХрд░рдирд╛ рдФрд░ рджреБрдирд┐рдпрд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рдмрдирд╛рдирд╛ рд╣реИ!"):
2. рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдЫрд╡рд┐ рдХреЛ рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
imgSource.Threshold(imgSource, 0, 255, ThresholdType.Binary | ThresholdType.Otsu);
3. рдкрд░рд┐рдгрд╛рдореА рдЫрд╡рд┐ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдвреВрдВрдврдирд╛ рдЖрд╕рд╛рди рд╣реИред рд╣рдо рдЕрдзрд┐рдХрддрдо рдмрд╛рд╣рд░реА рд╕рдореЛрдЪреНрдЪ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВрдЧреЗред OpenCVSharp рдореЗрдВ рдПрдХ рдмреЗрд╣рддрд░реАрди CvContourScanner рдХреНрд▓рд╛рд╕ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдЗрдореЗрдЬ рдХреА рд╕рднреА рдкрд╛рдИ рдЧрдИ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддрд╛ рд╣реИред Linq рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрди рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдЧреАред
using (var storage = new CvMemStorage())
using (var scanner = new CvContourScanner(image, _storage, CvContour.SizeOf, ContourRetrieval.External, ContourChain.ApproxSimple))
{
var largestContour = scanner.OrderBy(contour => Math.Abs(contour.ContourArea())).FirstOrDefault();
}
рдпрджрд┐ рдЖрдк рдкрд╛рдпрд╛ рд░реВрдкрд░реЗрдЦрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрди рдЫрд╡рд┐ рдорд┐рд▓рддреА рд╣реИ:
4. рд╣реБрд░реНрд░реЗ! рдПрдХ рд╕рд░реНрдХрд┐рдЯ рдорд┐рд▓рд╛! рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдмрд╣реБрдд рдХрдо рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ - рдпрд╣ рд╕рднреА рдХреЛрдиреЗ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рдЪреМрд░рд╛рд╣реЗ рдХреЗ рдмрд┐рдВрджреБред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЗрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реАрдзреА рд░реЗрдЦрд╛ рд╕рдореАрдХрд░рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд╛рдпрд╛ рд╕рдореЛрдЪреНрдЪ рдХреЗ рдкрдХреНрд╖реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИред OpenCV рдЗрд╕рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ! рдЗрд╕рдореЗрдВ рдПрдХ рдЯреВрд▓ рд╣реИ рдЬреЛ Hough рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ред рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд┐рдзрд┐ "рдбрд╛рд▓реА":
var lineSegments = imgSource.HoughLines2(storage, HoughLinesMethod.Probabilistic, 1, Math.PI / 180.0, 70, 100, 1).ToArray();
, 4 , , ! 100, 200, . , , , ( ┬л┬╗ OpenCV). , - , , : , :
var verticalSegments = segments
.Where(s => Math.Abs(s.P1.X - s.P2.X) < Math.Abs(s.P1.Y - s.P2.Y))
.ToArray();
var horizontalSegments = segments
.Where(s => Math.Abs(s.P1.X - s.P2.X) >= Math.Abs(s.P1.Y - s.P2.Y))
.ToArray();
, ┬л┬╗ тАУ ; тАУ . , , :
, . , :
var corners = horizontalSegments
.SelectMany(sh => verticalSegments
.Select(sv => sv.LineIntersection(sh))
.Where(v => v != null)
.Select(v => v.Value))
// exclude points which is out of image area
.Where(c => new CvRect(0, 0, imgSource.Width, imgSource.Height).Contains(c))
.ToArray();
:
тАУ ). OpenCVSharp:
contour = contour.ApproxPoly(CvContour.SizeOf, storage, ApproxPolyMethod.DP, contour.ArcLength() * 0.02, true);
, ! , - :
5. , . , тАУ , . , , . , тАУ - , . , , .
, , , 100% . , , , , , .
, , . : . . , , :
:
, , . !
- . , ( 10, тАУ , тАУ ):
, ┬л┬╗ . - , , . - , , :
:
deltaX, deltaY тАУ , ;
targetWidth, targetHeight тАУ ;
topWidth, bottomWidth, leftHeight, rightHeight тАУ .
:
, :
. , .
, ┬л┬╗ , ┬л┬╗ , , - тАж
, - . , . , Canon. ┬л┬╗ ┬л ┬╗ LiveView, .
, . youtube , , . !
var lineSegments = imgSource.HoughLines2(storage, HoughLinesMethod.Probabilistic, 1, Math.PI / 180.0, 70, 100, 1).ToArray();
, 4 , , ! 100, 200, . , , , ( ┬л┬╗ OpenCV). , - , , : , :
var verticalSegments = segments
.Where(s => Math.Abs(s.P1.X - s.P2.X) < Math.Abs(s.P1.Y - s.P2.Y))
.ToArray();
var horizontalSegments = segments
.Where(s => Math.Abs(s.P1.X - s.P2.X) >= Math.Abs(s.P1.Y - s.P2.Y))
.ToArray();
, ┬л┬╗ тАУ ; тАУ . , , :
, . , :
var corners = horizontalSegments
.SelectMany(sh => verticalSegments
.Select(sv => sv.LineIntersection(sh))
.Where(v => v != null)
.Select(v => v.Value))
// exclude points which is out of image area
.Where(c => new CvRect(0, 0, imgSource.Width, imgSource.Height).Contains(c))
.ToArray();
:
тАУ ). OpenCVSharp:
contour = contour.ApproxPoly(CvContour.SizeOf, storage, ApproxPolyMethod.DP, contour.ArcLength() * 0.02, true);
, ! , - :
5. , . , тАУ , . , , . , тАУ - , . , , .
, , , 100% . , , , , , .
, , . : . . , , :
:
, , . !
- . , ( 10, тАУ , тАУ ):
, ┬л┬╗ . - , , . - , , :
:
deltaX, deltaY тАУ , ;
targetWidth, targetHeight тАУ ;
topWidth, bottomWidth, leftHeight, rightHeight тАУ .
:
, :
. , .
, ┬л┬╗ , ┬л┬╗ , , - тАж
, - . , . , Canon. ┬л┬╗ ┬л ┬╗ LiveView, .
, . youtube , , . !