рдкрд░рд┐рдЪрдп

рд╣рдо рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рдмреЙрдЯ рд╡рд┐рдХрд╕рд┐рдд
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рджреБрдирд┐рдпрд╛ рдкрд░ рд╢рд╛рд╕рди рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдкрд┐рдЫрд▓реА рдмрд╛рддрдЪреАрдд рдиреЗ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рд╕рдВрдкрд░реНрдХ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ: рдорд╛рдЙрд╕ рдЪрд▓рддрд╛ рд╣реИ, рдЫрд╡рд┐ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдмреЗрд╢рдХ, рдЖрдк рдПрдХ рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддреИрдпрд╛рд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП, рд╡реНрдпрд╛рдкрдХ
OpenCV рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓реЗрдВ ред рдпрд╣ .net рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рдмрдВрдзрд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рд░реИрдкрд░
OpenCvSharp рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
рдЬреЛрдбрд╝реЗрдВрдЧреЗ ред
рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ OpenCV рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдПрдХ рдРрд╕рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЪреБрдиреЗрдВ рдЬреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдФрд░ рдЫрд╛рдпрд╛ рдХреЛ рд╡рд╕реНрддреБрдУрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЖрдЬ рдЗрд╕ рд▓рдХреНрд╖реНрдп рдХреА рдУрд░ рдмрдврд╝реЗрдВрдЧреЗред
рд╡рд┐рд╖рдп рдХрд╡рд░ :
рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЪрдпрди, OpenCV рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рдХрд╛ рдЪрдпрди, рдмреБрдирд┐рдпрд╛рджреА OpenCV рдХрд╛рд░реНрдпреЛрдВ, рдЪрд▓рддреА рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛, HSV рд░рдВрдЧ рдореЙрдбрд▓ред
рдУрдкреЗрдирд╡реНрдпреВ рдХреНрдпреЛрдВ?
рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдЕрдЪреНрдЫреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ, рдПрдХ
OpenCV рдкрд░ рдкреНрд░рдХрд╛рд╢ рдЕрднрд┐рд╕рд░рдг рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ред
рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ .net рдХреЗ рддрд╣рдд рдпрд╣
Accord.Net рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдФрд░ рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг
AForge.Net ) рдкрд░ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдпреЗ рджреЛрдиреЛрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рднреА рдореБрдХреНрдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдУрдкрдирд╕реАрд╡реА рдХреЗ рд╡рд┐рдкрд░реАрдд .net рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рджреЗрд╢реА (рдкреНрд░рдмрдВрдзрд┐рдд) рд╣реИрдВред
рдмрд┐рдХреНрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдкрд╛рдж рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, "рдордЬрд╝реЗ рдХреЗ рд▓рд┐рдП" рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдБрдЧрд╛ред рдЕрдЪреНрдЫреЗ рдкреНрд░рдмрдВрдзрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЪрдпрди рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдиреАрдЪрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рддреИрдирд╛рддреА, рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдФрд░ рдмрд╛рдж рдХреЗ рд░рдЦрд░рдЦрд╛рд╡ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдореЗрдВ рдФрд░ "рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдП" рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ, рдПрдХ рдмрдбрд╝рд╛ рд╕рдореБрджрд╛рдп рд░рдЦрд░рдЦрд╛рд╡ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рд░рд▓реАрдХрд░рдг рд╕реЗ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдФрд░ рдпрд╣ рд╣рдореЗрдВ OpenCV рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдмрдбрд╝рд╛ рд╕рдореБрджрд╛рдп
рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рд╕реНрд╡рддрдВрддреНрд░ рдкрд╕рдВрдж рдХреЗ рд╕рд╛рде, рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдПрдХ рдмрдбрд╝рд╛ рд╕рдХреНрд░рд┐рдп рд╕рдореБрджрд╛рдп рд╣реИред рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрдиреБрдпрд╛рдпрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдЙрдЪреНрдЪ рдкрд░реАрдХреНрд╖рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдкреНрд░рддрд┐рд╢рдд, рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдорд┐рд▓рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ Google рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред
OpenCV рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕ рдереАрд╕рд┐рд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкрд░ рдПрдХ рдкреБрд╕реНрддрдХ рд╣реИ:
OpenCV рд╕реАрдЦрдирд╛ (
рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдирд╛, рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЗрд╕реЗ рдкрдврд╝рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдареАрдХ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ ), рд░реВрд╕реА
locv.ru рдореЗрдВ рдЗрд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ (
рдореИрдВ рдЗрд╕реЗ рдЕрднреА рдирд╣реАрдВ рдЦреЛрд▓ рд╕рдХрддрд╛ ),
рдСрдирд▓рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИ , рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рд╢реНрди рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдЙрддреНрддрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реИрдВред
рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ рдкрд░ред
рдпрд╣ рд╕рдм рдХрд╛рдо рдкрд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд рджреЗрддрд╛ рд╣реИ, "рдкреАрд▓реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ! рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдУ! рдЙрджреНрджреЗрд╢реНрдп "(рдЬрдм рдЖрдк рдЬрд╛рддреЗ рд╣реИрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ) рдХреНрд▓рд╛рд╕рд┐рдХ рдХреЗ рдмрдЬрд╛рдп" рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдУ! рд▓рдХреНрд╖реНрдп! рдкреНрд▓рд┐! тАЭ(рдЬрдм рдкрд╣рд▓реЗ рдХрд╛рдлреА рд╕рдордп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
Google рдкреНрд░рд╢реНрди
рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдп рддреНрд╡рд░рд┐рдд Google рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рд╣рд▓ рдХрд┐рдП рдЧрдП рдереЗ: рдХреАрд╡рд░реНрдб рдХреЛ рдкреНрд░рд╢реНрди рдХреЗ рд╡рд┐рд╖рдп рдореЗрдВ Google рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рддреБрд░рдВрдд рдкрд╣рд▓реЗ рд▓рд┐рдВрдХ рдореЗрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрдиреЗ рджрдо рдкрд░ рдЬрд╡рд╛рдм рдЦреЛрдЬрддреЗ рд╕рдордп, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рд╖рдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рди рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Google рдкреНрд░рд╢реНрди рдХреА рд╕реБрдВрджрд░рддрд╛ рдФрд░ рд╡реНрдпрд╛рдХрд░рдгрд┐рдХ рд╢реБрджреНрдзрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдХреАрд╡рд░реНрдб рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд╣ рдЙрддреНрддрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдЧрд╛ред
рд╣рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореБрджреНрджреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг:
- рдЫрд╡рд┐ рд╕реЗ рдЖрд░-рдШрдЯрдХ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ -
Google рдЕрдиреБрд░реЛрдз:
google: opencv рдХреЛ рдПрдХрд▓ рдЪреИрдирд▓ рдорд┐рд▓рддрд╛ рд╣реИ , рдФрд░ рдкрд╣рд▓рд╛ рд▓рд┐рдВрдХ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкреНрд▓рд┐рдЯ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
- рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдЦреЛрдЬреЗрдВ:
google: opencv рдЕрдВрддрд░ рдЫрд╡рд┐рдпрд╛рдВ , рдФрд░ рдкрд╣рд▓реЗ рдЙрддреНрддрд░ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрдкрд╕реНрдерд┐рдд рдлрд╝рдВрдХреНрд╢рди рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп рдЕрдВрддрд░ рдХреЗ рдмрдЬрд╛рдп рддреБрд▓рдирд╛ рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ Google рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреГрд╖реНрда рджрд┐рдЦрд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛, рдФрд░ рдпрд╣ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рддреБрд▓рдирд╛, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрддреНрддрд░ рджреЗрдЧрд╛ред рдпрд╣ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдХреЗ рдЙрддреНрддрд░ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп рдХреАрд╡рд░реНрдб рдЪреБрдирдиреЗ рдХреЗ рдорд╣рддреНрд╡ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
OpenCV рдХреЗ рд▓рд┐рдП .net-рдЖрд╡рд░рдг рдХреЛ рдЪреБрдирдирд╛
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ C # рдХреЗ рд╕рд╛рде рджреЛрд╕реНрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рд╣рд▓ рд╣реЛ рдЪреБрдХреА рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реЗ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЙрдкрд▓рдмреНрдз рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдирд╛ рд╣реИред рджреЛ
рд╕рд╛рдорд╛рдиреНрдп рдЖрд╡рд░рдг рд╣реИрдВ :
рдЗрдордЧреВ рдХреЗрд╡реА рдФрд░
рдУрдкрдирдЪрд░реНрд╡рд╢рдк ред Emgu Cv рдЕрдзрд┐рдХ рдкреБрд░рд╛рдирд╛ рдФрд░ рдЕрдзрд┐рдХ рдФрдкрдЪрд╛рд░рд┐рдХ рд╣реИ, OpenCvSharp рдЕрдзрд┐рдХ рдЖрдзреБрдирд┐рдХ рд╣реИред рдпрд╣ рд╡рд┐рдХрд▓реНрдк OpenCvSharp рддрдХ рд╕реАрдорд┐рдд рдерд╛, рд▓реЗрдЦрдХ рдХреЗ рдЙрди рд╢рдмреНрджреЛрдВ рдХреЛ рд░рд┐рд╢реНрд╡рдд рджреЗрддрд╛ рдерд╛, рдЬреЛ рдЖрдИрдбреАрд╕реЛрдкрд╛рдпрд░реА рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд▓реЗрдЦрдХ рдиреЗ рди рдХреЗрд╡рд▓ 1 рдореЗрдВ C / C ++ рд╕реЗ C # 1 рдореЗрдВ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛, рдмрд▓реНрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рднреА рдЬреЛрдбрд╝рд╛ рддрд╛рдХрд┐ рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА C # рд╢реИрд▓реА рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛред
OpenCvSharp рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреЛрдбрд╝рдирд╛
OpenCvSharp рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдЭрдВрдЭрдЯ рдХреЗ рдорд╛рдирдХ рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдЦрдХ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛
рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИ, рдЗрд╕рдореЗрдВ
OpenCvSharp рдХреЛ рдирдЧреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рд╣реИред
рдмреБрдирд┐рдпрд╛рджреА рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдп
OpenCV рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдХрд╛рд░реНрдп рд╣реИрдВред рдЖрдЗрдП рд╣рдо рдХреЗрд╡рд▓ рдЙрди рдореВрд▓ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдЫрд╡рд┐ рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред OpenCV рдХреЗ рджреЛ рдЙрдкрдпреЛрдЧ рд╣реИрдВ: C- рд╢реИрд▓реА рдФрд░ C ++ - рд╢реИрд▓реАред рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо C ++ рд╢реИрд▓реА (рдпрд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, OpenCvSharp рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕рдХреЗ рдПрдирд╛рд▓реЙрдЧ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рджреЛ рдореБрдЦреНрдп рд╡рд░реНрдЧ рд╣реИрдВ: Mat рдФрд░ Cv2ред рджреЛрдиреЛрдВ OpenCvSharp.CPlusPlus рдХреЗ рдирд╛рдо рд╕реНрдерд╛рди рдкрд░ рд╣реИрдВред Mat рд╕реНрд╡рдпрдВ рдЫрд╡рд┐ рд╣реИ, рдФрд░ Cv2 рдЫрд╡рд┐рдпреЛрдВ рдкрд░ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИред
рдХрд╛рд░реНрдп:
OpenCV рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (
рд╕реНрдЯреНрд░рдХреНрдЪрд░рд▓ рдПрдирд╛рд▓рд┐рд╕рд┐рд╕ рдПрдВрдб рд╢реЗрдк рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░реНрд╕ ,
рдореЛрд╢рди рдПрдирд╛рд▓рд┐рд╕рд┐рд╕ рдПрдВрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реИрдХрд┐рдВрдЧ ,
рдлреАрдЪрд░ рдбрд┐рдЯреЗрдХреНрд╢рди ,
рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди ) рдХреЗ рдЪрдпрди рдХреЗ рд▓рд┐рдП рднреА рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЙрдиреНрд╣реЗрдВ рдирд┐рдЪреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдП (рдЙрдиреНрд╣реЗрдВ
рд╢рд╛рдпрдж рд╡реИрд╕реЗ рднреА рдХрд┐рддрд╛рдм рдкрдврд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ ), рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдмрд╛рдж рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрдВред
рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛ рдПрдХ рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ рдЬреЛ рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛ рдХрд╛рдЯрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЬреБрдорд╛ рдореИрджрд╛рди рдХреА рдЫрд╡рд┐ рдмрд╣реБрдд рд░рдВрдЧреАрди рд╣реИ, рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЪрдордХ рдХрдЯ-рдСрдл рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдиреАрдЪреЗ рдореВрд▓ рдЫрд╡рд┐, рдЗрд╕рдХрд╛ рдХрд╛рд▓рд╛ рдФрд░ рд╕рдлреЗрдж рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдХрдЯ-рдСрдл рдХреА рдПрдХ рд╕реАрдврд╝реА рд╣реИред рдЕрдВрддрд┐рдо рдЫрд╡рд┐ рджрд┐рдЦрд╛рддреА рд╣реИ рдХрд┐ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреГрд╖реНрдарднреВрдорд┐ рдЧреЗрдВрджреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд▓реАрди рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдпрд╛ рддреЛ рджреЛрдиреЛрдВ рдореМрдЬреВрдж рд╣реИрдВ, рдпрд╛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИрдВред



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

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░рдВрдЧ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЬреАрд╡рди рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред






рдЪрд▓рддреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░реЗрдВ
рдЪрд▓рддреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдЖрдзрд╛рд░ рд╕рд░рд▓ рд╣реИ: рджреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ - рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдмрд┐рдВрджреБ рд╡рд╛рдВрдЫрд┐рдд рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдФрд░ рд╢реИрддрд╛рди, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╣реИ ...
рдЫрд╡рд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдирд┐рд░реНрдорд╛рдг
рдЫрд╡рд┐рдпреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдмреЙрдЯ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВред рдмреЙрдЯ рдЕрдВрддрд┐рдо рдлрд╝реНрд░реЗрдореЛрдВ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд░рдЦреЗрдЧрд╛, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбрд┐рд╕реНрдХ рдкрд░ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреЗрд╕ рдмрд╛рд░ рджрдмрд╛рдХрд░ред
var history = new List<Bitmap>(); for (var tick = 0; ;tick++) { var bmp = GetScreenImage(gameScreenRect); history.Insert(0, bmp); const int maxHistoryLength = 10; if (history.Count > maxHistoryLength) history.RemoveRange(maxHistoryLength, history.Count - maxHistoryLength); if (Console.KeyAvailable) { var keyInfo = Console.ReadKey(); if (keyInfo.Key == ConsoleKey.Spacebar) { for (var i = 0; i < history.Count; ++i) history[i].Save(string.Format("{0}.png", i)); } [..] } [..] }
рд╣рдо рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрд╡рд╛рдЬ рдХрд░рддреЗ рд╣реИрдВ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рд╛рде рдкрд░ рджреЛ рдлреНрд░реЗрдо рд╣реИрдВред


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



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

рддреБрд▓рдирд╛:



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

RGB рдЬреИрд╕реЗ HSV рдХрд▓рд░ рдореЙрдбрд▓ рдореЗрдВ рддреАрди рдЪреИрдирд▓ рд╣реЛрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЙрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд (рд╡рд╣реА рд╕реАрдПрдорд╡рд╛рдИрдХреЗ) - рдпрд╣ рд╕рд┐рд░реНрдл рд░рдВрдЧреЛрдВ рдХрд╛ рдорд┐рд╢реНрд░рдг рдирд╣реАрдВ рд╣реИред
- рдкрд╣рд▓рд╛ рдЪреИрдирд▓, рдПрдЪ (рд╣реНрдпреВ) - рд░рдВрдЧ рдЯреЛрдиред рдкрд╣рд▓реЗ рд╕рдиреНрдирд┐рдХрдЯрди рдореЗрдВ, рдпрд╣ рдЗрдВрджреНрд░рдзрдиреБрд╖ рд╕реЗ рд░рдВрдЧ рд╕рдВрдЦреНрдпрд╛ рд╣реИред
- рджреВрд╕рд░рд╛ рдЪреИрдирд▓, рдПрд╕ (рд╕рдВрддреГрдкреНрддрд┐) - рд╕рдВрддреГрдкреНрддрд┐ред рдЗрд╕ рдЪреИрдирд▓ рдХрд╛ рдореВрд▓реНрдп рдЬрд┐рддрдирд╛ рдХрдо рд╣реЛрдЧрд╛, рдЧреНрд░реЗ рдХреЗ рд░рдВрдЧ рдХреЗ рдХрд░реАрдм, рдЙрддрдирд╛ рд╣реА рдЕрдзрд┐рдХ - рд░рдВрдЧ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ред рдЙрдЪреНрдЪ рд╕рдВрддреГрдкреНрддрд┐ рд░рдВрдЧреЛрдВ рдХреЛ "рдЕрдореНрд▓реАрдп" рдХреЗ рд░реВрдк рдореЗрдВ рдмреЛрд▓рдЪрд╛рд▓ рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
- рддреАрд╕рд░рд╛ рдЪреИрдирд▓, рд╡реА (рдорд╛рди) - рдЪрдордХред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдЪреИрдирд▓ рд╣реИ, рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд░реЛрд╢рдиреА, рдЗрд╕ рдЪреИрдирд▓ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ рдореВрд▓реНрдпред
рджрд╛рдИрдВ рдУрд░ рдХреА рддрд╕реНрд╡реАрд░ рдЖрдкрд╕ рдореЗрдВ рдЪреИрдирд▓реЛрдВ рдФрд░ рд░рдВрдЧреЛрдВ рдХреЗ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рджрд┐рдЦрд╛рддреА рд╣реИред рдПрдХ рд╕рд░реНрдХрд▓ рдореЗрдВ рдПрдХ рдЗрдВрджреНрд░рдзрдиреБрд╖ рд╣реЛрддрд╛ рд╣реИ - рдпрд╣ рдЪреИрдирд▓ рдПрдЪ рд╣реИред рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП рддреНрд░рд┐рдХреЛрдг (рдЕрдм рдпрд╣ рд▓рд╛рд▓ рд╣реИ) рдЪреИрдирд▓ рдПрд╕ - рд╕рдВрддреГрдкреНрддрд┐ (рджрд┐рд╢рд╛-рдКрдкрд░ рджрд╛рдПрдВ) рдФрд░ рдЪреИрдирд▓ рд╡реА - рдЪрдордХ (рдКрдкрд░-рдмрд╛рдПрдВ) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рджрд┐рдЦрд╛рддрд╛ рд╣реИред рд╢рд╛рд╕реНрддреНрд░реАрдп рд░реВрдк рд╕реЗ, рдЪреИрдирд▓ H рдХрд╛ рдорд╛рди 0-360, S - 0-100, V - 0-100 рддрдХ рд╣реИред OpenCV рдореЗрдВ, рдПрдХ рдмрд╛рдЗрдЯ рдХреЗ рдЖрдпрд╛рдо рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЪреИрдирд▓реЛрдВ рдХрд╛ рдорд╛рди 0-255 рдХреА рд╕реАрдорд╛ рддрдХ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
RGB рд░рдВрдЧ рдореЙрдбрд▓ рдорд╛рдирд╡ рдЖрдВрдЦ рдХреЗ рдХрд░реАрдм рд╣реИ, рдЗрд╕реЗ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдЪрдПрд╕рд╡реА рд░рдВрдЧ рдореЙрдбрд▓ рдорд╕реНрддрд┐рд╖реНрдХ рджреНрд╡рд╛рд░рд╛ рд░рдВрдЧ рдХреЛ рдХреИрд╕реЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдХрд░реАрдм рд╣реИред рдиреАрдЪреЗ рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЪреИрдирд▓ рдХреЛ рдкреНрд▓рд╕ / рдорд╛рдЗрдирд╕ 50 рддреЛрддреЛрдВ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПред рд╡реЗ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЪреИрдирд▓ рдПрд╕ рдФрд░ рд╡реА рдХреЛ 100 рдЗрдХрд╛рдЗрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рднреА (рдФрд░ рдпрд╣ рдЖрдзреА рд╕реАрдорд╛ рд╣реИ), рдЫрд╡рд┐ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдорд╛рдиреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЪреИрдирд▓ рдПрдЪ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдкрд░рд┐рд╡рд░реНрддрди рднреА рдзрд╛рд░рдгрд╛ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЫрд╡рд┐ "рдирд╢реЗ рдХреА рд▓рдд" рдмрди рдЬрд╛рддреА рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рдВрдмреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдорд╕реНрддрд┐рд╖реНрдХ рдиреЗ рдХрдо рд╕реНрдерд┐рд░ рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ рдбреЗрдЯрд╛ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╕реАрдЦ рд▓рд┐рдпрд╛ рд╣реИред
рд╕реНрдерд┐рд░ рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ? рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдмрд╛рд╣рд░реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдмрджрд▓рддрд╛ рд╣реИред рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдЗрдЯрдо рд▓реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдареЛрд╕ рдЧреЗрдВрджред рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ рд░рдВрдЧ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рд╣рд░реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕ рд░рдВрдЧ рдХреА рдзрд╛рд░рдгрд╛ рдмрджрд▓ рдЬрд╛рдПрдЧреА: рд░реЛрд╢рдиреА, рд╡рд╛рдпреБ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛, рдкрдбрд╝реЛрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЖрджрд┐ред рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рдХрд╛рд░реНрдп рдмрд╛рд╣рд░реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рд╕реЗ рдЧреЗрдВрдж рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдмрд╛рд╣рд░реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рдереЛрдбрд╝рд╛ рдмрджрд▓рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрджрд▓рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдХрдо рд╕реНрдерд┐рд░ рдЪрдордХ (рдЪреИрдирд▓ рд╡реА) рд╣реИ: рд╡реЗ рдЫрд╛рдпрд╛ рдореЗрдВ рдЪрд▓реЗ рдЧрдП рдФрд░ рдЖрд╕рдкрд╛рд╕ рдХреА рджреБрдирд┐рдпрд╛ рдХреА рдЪрдордХ рдмрджрд▓ рдЧрдИ, рдЖрдХрд╛рд╢ рдореЗрдВ рдмрд╛рджрд▓ рдЫрд╛ рдЧрдП - рдФрд░ рдЪрдордХ рдлрд┐рд░ рд╕реЗ рдмрджрд▓ рдЧрдИред рд╕рдВрддреГрдкреНрддрд┐ (рдЪреИрдирд▓ рдПрд╕) рднреА рдкреВрд░реЗ рджрд┐рди рдмрджрд▓рддреА рд╣реИ, рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рд░рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдзрд╛рд░рдгрд╛ - рдХрдо рд░реЛрд╢рдиреА, рдЕрдзрд┐рдХ
рд╢рдВрдХреБ (рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж рджреГрд╖реНрдЯрд┐) рдХрд╛ рдпреЛрдЧрджрд╛рди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХрдо рдЬрд╛рдирдХрд╛рд░реА
рдЫрдбрд╝ (рд░рдВрдЧ рджреГрд╖реНрдЯрд┐) рд╕реЗ рдЖрддреА рд╣реИред рд░рдВрдЧ рдЯреЛрди (рдЪреИрдирд▓ рдПрдЪ) рд╕рдмрд╕реЗ рдХрдордЬреЛрд░ рд░реВрдк рд╕реЗ рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╡рд╕реНрддреБ рдХреЗ рд░рдВрдЧ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред















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






рд╕рд╛рд░рд╛рдВрд╢
рдЖрдЬ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЧреЗрдВрджреЛрдВ рдХреЛ рдкреГрд╖реНрдарднреВрдорд┐ рд╕реЗ рдФрд░ рдЙрдирдХреА рдЫрд╛рдпрд╛ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдФрд░ рдЖрдк рд╢рд╛рдВрдд рдЖрддреНрдорд╛ рдХреЗ рд╕рд╛рде рд╕реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдкреБрдирд╢реНрдЪ
рджрд┐рдЦрд╛рдП рдЧрдП рд╕рднреА рдЪрд┐рддреНрд░ OpenCV (рдХрдЯ рдХреЗ рддрд╣рдд рдХреЛрдб) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда var resizeK = 0.2; var dir = "Example/"; var src = new Mat("0.bmp"); var src_g = new Mat("0.bmp", LoadMode.GrayScale); var src_1 = new Mat("1.bmp"); var src_1_g = new Mat("1.bmp", LoadMode.GrayScale); var background = new Mat("background.bmp"); var background_g = new Mat("background.bmp", LoadMode.GrayScale); src.Resize(resizeK).ImWrite(dir + "0.png"); src_g.Resize(resizeK).ImWrite(dir + "0 g.png"); src_g.ThresholdStairs().Resize(resizeK).ImWrite(dir + "0 g th.png"); var canny = new Mat(); Cv2.Canny(src_g, canny, 50, 200); canny.Resize(0.5).ImWrite(dir + "0 canny.png"); Mat[] src_channels; Cv2.Split(src, out src_channels); for (var i = 0; i < src_channels.Length; ++i) { var channels = Enumerable.Range(0, src_channels.Length).Select(j => new Mat(src_channels[0].Rows, src_channels[0].Cols, src_channels[0].Type())).ToArray(); channels[i] = src_channels[i]; var dst = new Mat(); Cv2.Merge(channels, dst); dst.Resize(resizeK).ImWrite(dir + string.Format("0 ch{0}.png", i)); src_channels[i].ThresholdStairs().Resize(resizeK).ImWrite(dir + string.Format("0 ch{0} th.png", i)); } if (true) { src.Resize(0.4).ImWrite(dir + "0.png"); src_1.Resize(0.4).ImWrite(dir + "1.png"); background.Resize(0.4).ImWrite(dir + "bg.png"); var dst_01 = new Mat(); Cv2.Absdiff(src, src_1, dst_01); dst_01.Resize(resizeK).ImWrite(dir + "01.png"); dst_01.Cut(new Rect(50, src.Height * 4 / 5 - 50, src.Width / 5, src.Height / 5)).ImWrite(dir + "01 part.png"); dst_01.Cut(new Rect(50, src.Height * 4 / 5 - 50, src.Width / 5, src.Height / 5)).CvtColor(ColorConversion.RgbToGray).ImWrite(dir + "01 g.png"); dst_01.CvtColor(ColorConversion.RgbToGray).ThresholdStairs().Resize(resizeK).ImWrite(dir + "01 g th.png"); var dst_01_g = new Mat(); Cv2.Absdiff(src_g, src_1_g, dst_01_g); dst_01_g.Cut(new Rect(50, src.Height * 4 / 5 - 50, src.Width / 5, src.Height / 5)).ImWrite(dir + "0g1g.png"); dst_01_g.ThresholdStairs().Resize(resizeK).ImWrite(dir + "0g1g th.png"); } if (true) { var dst_0b = new Mat(); Cv2.Absdiff(src, background, dst_0b); dst_0b.Resize(0.6).ImWrite(dir + "0b.png"); var dst_0b_g = new Mat(); Cv2.Absdiff(src_g, background_g, dst_0b_g); dst_0b_g.Resize(0.3).ImWrite(dir + "0b g.png"); dst_0b_g.ThresholdStairs().Resize(0.3).ImWrite(dir + "0b g th.png"); } if (true) { var hsv_src = new Mat(); Cv2.CvtColor(src, hsv_src, ColorConversion.RgbToHsv); var hsv_background = new Mat(); Cv2.CvtColor(background, hsv_background, ColorConversion.RgbToHsv); var hsv_background_channels = hsv_background.Split(); var hsv_src_channels = hsv_src.Split(); if (true) { var all = new Mat(src.ToIplImage(), true); for (var i = 0; i < hsv_src_channels.Length; ++i) { hsv_src_channels[i].CvtColor(ColorConversion.GrayToRgb).CopyTo(all, new Rect(i * src.Width / 3, src.Height / 2, src.Width / 3, src.Height / 2)); } src_g.CvtColor(ColorConversion.GrayToRgb).CopyTo(all, new Rect(src.Width / 2, 0, src.Width / 2, src.Height / 2)); all.Resize(0.3).ImWrite(dir + "all.png"); } foreach (var pair in new[] { "h", "s", "v" }.Select((channel, index) => new { channel, index })) { var diff = new Mat(); Cv2.Absdiff(hsv_src_channels[pair.index], hsv_background_channels[pair.index], diff); diff.Resize(0.3).With_Title(pair.channel).ImWrite(dir + string.Format("0b {0}.png", pair.channel)); diff.ThresholdStairs().Resize(0.3).ImWrite(dir + string.Format("0b {0} th.png", pair.channel)); hsv_src_channels[pair.index].Resize(resizeK).With_Title(pair.channel).ImWrite(dir + string.Format("0 {0}.png", pair.channel)); foreach (var d in new[] { -100, -50, 50, 100 }) { var delta = new Mat(hsv_src_channels[pair.index].ToIplImage(), true); delta.Rectangle(new Rect(0, 0, delta.Width, delta.Height), new Scalar(Math.Abs(d)), -1); var new_channel = new Mat(); if (d >= 0) Cv2.Add(hsv_src_channels[pair.index], delta, new_channel); else Cv2.Subtract(hsv_src_channels[pair.index], delta, new_channel); var new_hsv = new Mat(); Cv2.Merge(hsv_src_channels.Select((channel, index) => index == pair.index ? new_channel : channel).ToArray(), new_hsv); var res = new Mat(); Cv2.CvtColor(new_hsv, res, ColorConversion.HsvToRgb); res.Resize(resizeK).With_Title(string.Format("{0} {1:+#;-#}", pair.channel, d)).ImWrite(dir + string.Format("0 {0}{1}.png", pair.channel, d)); } } } static class OpenCvHlp { public static Scalar ToScalar(this Color color) { return new Scalar(color.B, color.G, color.R); } public static void CopyTo(this Mat src, Mat dst, Rect rect) { var mask = new Mat(src.Rows, src.Cols, MatType.CV_8UC1); mask.Rectangle(rect, new Scalar(255), -1); src.CopyTo(dst, mask); } public static Mat Absdiff(this Mat src, Mat src2) { var dst = new Mat(); Cv2.Absdiff(src, src2, dst); return dst; } public static Mat CvtColor(this Mat src, ColorConversion code) { var dst = new Mat(); Cv2.CvtColor(src, dst, code); return dst; } public static Mat Threshold(this Mat src, double thresh, double maxval, ThresholdType type) { var dst = new Mat(); Cv2.Threshold(src, dst, thresh, maxval, type); return dst; } public static Mat ThresholdStairs(this Mat src) { var dst = new Mat(src.Rows, src.Cols, src.Type()); var partCount = 10; var partWidth = src.Width / partCount; for (var i = 0; i < partCount; ++i) { var th_mat = new Mat(); Cv2.Threshold(src, th_mat, 255 / 10 * (i + 1), 255, ThresholdType.Binary); th_mat.Rectangle(new Rect(0, 0, partWidth * i, src.Height), new Scalar(0), -1); th_mat.Rectangle(new Rect(partWidth * (i + 1), 0, src.Width - partWidth * (i + 1), src.Height), new Scalar(0), -1); Cv2.Add(dst, th_mat, dst); } var color_dst = new Mat(); Cv2.CvtColor(dst, color_dst, ColorConversion.GrayToRgb); for (var i = 0; i < partCount; ++i) { color_dst.Line(partWidth * i, 0, partWidth * i, src.Height, new CvScalar(50, 200, 50), thickness: 2); } return color_dst; } public static Mat With_Title(this Mat mat, string text) { var res = new Mat(mat.ToIplImage(), true); res.Rectangle(new Rect(res.Width / 2 - 10, 30, 20 + text.Length * 15, 25), new Scalar(0), -1); res.PutText(text, new OpenCvSharp.CPlusPlus.Point(res.Width / 2, 50), FontFace.HersheyComplex, 0.7, new Scalar(150, 200, 150)); return res; } public static Mat Resize(this Mat src, double k) { var dst = new Mat(); Cv2.Resize(src, dst, new OpenCvSharp.CPlusPlus.Size((int)(src.Width * k), (int)(src.Height * k))); return dst; } public static Mat Cut(this Mat src, Rect rect) { return new Mat(src, rect); } public static Mat[] Split(this Mat hsv_background) { Mat[] hsv_background_channels; Cv2.Split(hsv_background, out hsv_background_channels); return hsv_background_channels; } }
рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕-рдЖрд░реНрдХреЗрдб рдХреЗ рд▓рд┐рдП рдмреЙрдЯред рднрд╛рдЧ рд╕рдВрдЦреНрдпрд╛ 1: рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВрдЖрд░реНрдХреЗрдб рдХреЗ рд▓рд┐рдП рдмреЙрдЯред рднрд╛рдЧ рд╕рдВрдЦреНрдпрд╛ 2: рд╣рдо OpenCV рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ