рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдореЗрдВ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ, рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ? рд╕рдВрдкрд░реНрдХ рд░рд╣рд┐рдд рд╕реНрдХреИрдирд┐рдВрдЧ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рддрд╕реНрд╡реАрд░реЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╕реБрдзрд╛рд░

рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣рдорд╛рд░реЗ рд╕рд╛рде рддрдм рдЖрдпрд╛ рдЬрдм тАЬ Http рдкрд░ ABBYY рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд тАЬ ABBYYSScanner рдореЗрдВ рдПрдХ рдЫрд╡рд┐ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдЪрдпрди рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ?

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдХреБрдЫ рдкрд╛рдардХреЛрдВ рдиреЗ рдПрдХ рдЙрдЪрд┐рдд рд╕рд╡рд╛рд▓ рдХрд┐рдпрд╛ рдерд╛: "рдЪрд┐рддреНрд░ рдореЗрдВ рдкрд╛рдП рдЧрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?" рдореИрдВ рдЪреЗрд╢рд╛рдпрд░ рдХреИрдЯ рдПрд▓рд┐рд╕ рдХреЗ рд╢рдмреНрджреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреВрдВрдЧрд╛: "рдЖрдк рдХрд╣рд╛рдБ рдЖрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?" рдпрджрд┐ рдЕрдВрддрд┐рдо рд▓рдХреНрд╖реНрдп рддрд╕реНрд╡реАрд░ рд╕реЗ "рдирд┐рдХрд╛рд▓рдирд╛" рдкрд╛рда рд╣реИ? рдбреЗрдЯрд╛, рддреЛ рдЖрдкрдХреЛ рдкрд╣рдЪрд╛рди рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рд╡рд┐рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рд╕рднреА рддрд╕реНрд╡реАрд░реЛрдВ рдХрд╛ "рд╣рд╛рде рд╕реЗ"ред рдпрджрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рдбреЗрдЯрд╛ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХреИрдкреНрдЪрд╛ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЫреЛрдЯреА рдХреАрдордд рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдХреИрдкреНрдЪрд╛ рдкрд░ рдорд╢реАрди рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рдХреА рдЬреАрдд рдореЗрдВ "рд╡рд┐рд╢реНрд╡рд╛рд╕рд┐рдпреЛрдВ" рдиреЗ рдирд┐рдпрдорд┐рддрддрд╛ рдХреЗ рд╕рд╛рде рдлреНрд░реАрд▓рд╛рдВрд╕ рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рджрд┐рдЦрд╛рдИред рдзрдиреНрдп рд╣реИ рд╡рд╣ рдЬреЛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЕрдм рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред

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



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

рджрд┐рдП рдЧрдП:

  1. рдПрдХ рдЖрдпрддрд╛рдХрд╛рд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рд╡рд┐рдХреГрдд рдЫрд╡рд┐
  2. рдЪрд┐рддреНрд░ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдЖрдХреГрддрд┐


рдЙрджреНрджреЗрд╢реНрдп:

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдЙрд╕рдХреЗ рдореВрд▓ рд░реВрдк рдореЗрдВ рд╕рдмрд╕реЗ рдХрдо рддрд░реАрдХреЗ рд╕реЗ рд╡рд╛рдкрд╕ рд▓рд╛рдПрдВ

рдЪреБрдиреМрддреА (рд░реВрд╕реА рд╕рдордХрдХреНрд╖ рдХрд┐рд╕реА рддрд░рд╣ рдШрдЯрд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ):

  1. рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рдЕрдиреБрдкрд╛рдд рд╣рдореЗрдВ рдареАрдХ рд╕реЗ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИрдВ
  2. рдЙрд╕ рд╡рд┐рдорд╛рди рдХреА рджреВрд░реА рдЬрд┐рд╕ рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд┐рд╣рд┐рдд рд╣реИ, рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ
  3. рдРрд╕реА рдХреЛрдИ рд╕рдВрджрд░реНрдн рд╡рд╕реНрддреБ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЖрдк рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╣реА рд╡рд░реНрдЧ рдЬреЛ рд▓реЗрдВрд╕ рдореЗрдВ рдЧрд┐рд░ рдЧрдпрд╛)


рд╕рдорд╛рдзрд╛рди:

рдЗрд╕рд▓рд┐рдП, рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдВрдкреВрд░реНрдг рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рднрд╛рдЧреЛрдВ рдореЗрдВ рддреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ:

  1. рдвреВрдБрдврдирд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реНрдХреИрди рдХреА рдЧрдИ рдЫрд╡рд┐ рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рд╡рд┐рдХреГрдд рд░реВрдкрд░реЗрдЦрд╛ (рд╢рд╛рдпрдж, рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╡рд░ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдПрдмреАрдмреАрд╡рд╛рдИ рд▓реЗрдЦ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ)ред
  2. рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╕рд╣реА рдЕрдиреБрдкрд╛рдд рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдирд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕рдВрд░реЗрдЦрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╡рд┐рдХреГрдд рд░реВрдкрд░реЗрдЦрд╛ рдХреЛ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдХ рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдЕрднреА рднреА рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдЕрдкрдирд╛рдпрд╛ рдФрд░ рдУрдкрдирд╕реАрд╡реА рдЯреВрд▓рдХрд┐рдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рд╣рдо рдЬреНрдпрд╛рджрд╛рддрд░ 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 , , . !







All Articles