{"id":216757,"date":"2014-04-14T05:50:02","date_gmt":"2014-04-14T01:50:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=216757"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=216757","title":{"rendered":"<span class=\"post_title\">\u0411\u043e\u0442 \u0434\u043b\u044f \u0430\u0440\u043a\u0430\u0434\u044b. \u0427\u0430\u0441\u0442\u044c \u21162: \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c OpenCv<\/span>"},"content":{"rendered":"<div class=\"content html_format\">\n<h4>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h4>\n<p><img decoding=\"async\" align=\"right\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/3eb\/189\/42d\/3eb18942ddc34126657bfa2a7b770485.png\"\/>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c <s>\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u0438\u0440\u043e\u043c<\/s> \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u0442\u0430 \u0434\u043b\u044f \u0438\u0433\u0440\u044b. \u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d: \u043c\u044b\u0448\u044c \u0431\u0435\u0433\u0430\u0435\u0442, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f. \u041f\u043e\u0440\u0430 \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u044d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u041c\u043e\u0436\u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0438\u0437\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u043e \u043b\u0443\u0447\u0448\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u043c\u0438 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0448\u0438\u0440\u043e\u043a\u043e\u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"http:\/\/opencv.org\/\">OpenCv<\/a>. \u041e\u043d\u0430 \u043d\u0435\u0440\u043e\u0434\u043d\u0430\u044f (unmanaged) \u0434\u043b\u044f .net, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0435\u0435 \u0447\u0435\u0440\u0435\u0437 wrapper <a href=\"https:\/\/github.com\/shimat\/opencvsharp\">OpenCvSharp<\/a>.<\/p>\n<p>  OpenCv \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438, \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0442\u0434\u0435\u043b\u0438\u0442 \u0444\u043e\u043d \u0438 \u0442\u0435\u043d\u0438 \u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430. \u041a \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 \u0438 \u0431\u0443\u0434\u0435\u043c \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f.<\/p>\n<hr\/>\n<p><b>\u0417\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0442\u0435\u043c\u044b<\/b>: <i>\u0432\u044b\u0431\u043e\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0432\u044b\u0431\u043e\u0440 wrapper-\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 OpenCv, \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 OpenCv, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u0432\u0438\u0436\u0443\u0449\u0438\u0445\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0446\u0432\u0435\u0442\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c HSV.<br \/>  <\/i><\/p>\n<hr\/>\n<p>  <a name=\"habracut\"><\/a>  <\/p>\n<h4>\u041f\u043e\u0447\u0435\u043c\u0443 OpenCv?<\/h4>\n<p>\u0414\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0435\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 <a href=\"http:\/\/opencv.org\/\">OpenCv<\/a> \u0441\u0432\u0435\u0442 \u043a\u043b\u0438\u043d\u043e\u043c \u043d\u0435 \u0441\u043e\u0448\u0435\u043b\u0441\u044f. <\/p>\n<p>  \u041f\u0440\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0434 .net \u0442\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"http:\/\/code.google.com\/p\/accord\/\">Accord.Net<\/a> (\u0438 \u0435\u0435 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e <a href=\"http:\/\/code.google.com\/p\/aforge\/\">AForge.Net<\/a>). \u042d\u0442\u0438 \u0434\u0432\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0442\u0430\u043a\u0436\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435, \u043d\u043e \u0440\u043e\u0434\u043d\u044b\u0435(managed) \u0434\u043b\u044f .net-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 OpenCv. <\/p>\n<p>  \u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u043d\u0430 \u043f\u0440\u043e\u0434\u0430\u0436\u0443, \u0430 \u043d\u0435 \u00abfor fun\u00bb \u2014 \u044f \u0441\u043a\u043e\u0440\u0435\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u0431\u044b \u043d\u0430 managed-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445. \u0412\u044b\u0431\u043e\u0440 \u0445\u043e\u0440\u043e\u0448\u0438\u0445 managed-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043d\u0435 \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043d\u043e \u0437\u0434\u043e\u0440\u043e\u0432\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435, \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u0435. \u041d\u043e \u0432 \u0441\u0442\u0430\u0440\u0442\u0430\u043f\u0430\u0445 \u0438 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u00abfor fun\u00bb \u0432\u0430\u0436\u043d\u0435\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 community, \u0447\u0435\u043c \u0431\u0443\u0434\u0443\u0449\u0435\u0435 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u044f. \u0418 \u044d\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0430\u0441 \u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 OpenCv, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u0448\u0438\u0440\u043e\u043a\u0430\u044f \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u044c.<\/p>\n<h5>\u0411\u043e\u043b\u044c\u0448\u043e\u0435 community<\/h5>\n<p>\u041f\u0440\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0432\u044b\u0431\u043e\u0440\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u0435, \u0447\u0442\u043e \u0438\u043c\u0435\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 community. \u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u0430\u0435\u0442 \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u043e\u0442\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043c\u0430\u043b\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u043d\u0435\u0443\u0434\u043e\u0431\u0441\u0442\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0433\u0443\u0433\u043b\u0435\u043d\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0445 \u043f\u043e \u0445\u043e\u0434\u0443 \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<p>  OpenCv \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0439 \u0442\u0435\u0437\u0438\u0441. \u041f\u043e \u043d\u0435\u0439 \u0435\u0441\u0442\u044c \u043a\u043d\u0438\u0436\u043a\u0430: <a href=\"http:\/\/shop.oreilly.com\/product\/0636920022497.do\">Learning OpenCv<\/a> (<i>\u0447\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0435\u0449\u0435 \u043d\u0435 \u0447\u0438\u0442\u0430\u043b, \u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0449\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/i>), \u0435\u0441\u0442\u044c \u0435\u0435 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 <a href=\"http:\/\/locv.ru\/\">locv.ru\/<\/a> (<i>\u0441\u0435\u0439\u0447\u0430\u0441 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f<\/i>), \u0435\u0441\u0442\u044c <a href=\"http:\/\/docs.opencv.org\/\">online-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a>, \u0435\u0441\u0442\u044c \u043a\u0443\u0447\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0441 \u043e\u0442\u0432\u0435\u0442\u0430\u043c\u0438 \u043d\u0430 <a href=\"http:\/\/stackoverflow.com\/questions\/tagged\/opencv?sort=frequent\">stackoverflow<\/a>.<\/p>\n<p>  \u0412\u0441\u0451 \u044d\u0442\u043e \u043d\u0430\u0435\u043c \u0434\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u043f\u043e\u0434\u0445\u043e\u0434 \u00ab\u041f\u043b\u0438! \u0413\u043e\u0442\u043e\u0432\u0441\u044c! \u0426\u0435\u043b\u044c\u0441\u044f\u00bb (\u043a\u043e\u0433\u0434\u0430 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438\u0434\u0435\u0442 \u043f\u043e \u0445\u043e\u0434\u0443 \u0440\u0430\u0431\u043e\u0442\u044b) \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u00ab\u0413\u043e\u0442\u043e\u0432\u0441\u044c! \u0426\u0435\u043b\u044c\u0441\u044f! \u041f\u043b\u0438!\u00bb (\u043a\u043e\u0433\u0434\u0430 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0443\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438).<\/p>\n<h5>\u0413\u0443\u0433\u043b\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u044b<\/h5>\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0437\u0430\u0434\u0430\u0447 \u0440\u0435\u0448\u0430\u043b\u043e\u0441\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0433\u0443\u0433\u043b\u0435\u043d\u0438\u044f: \u0432 \u0433\u0443\u0433\u043b \u0437\u0430\u0431\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 \u0432 \u0442\u0435\u043c\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u0430, \u0438 \u0432 \u043f\u0435\u0440\u0432\u044b\u0445 \u0441\u0441\u044b\u043b\u043a\u0430\u0445 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0442\u0432\u0435\u0442. \u041f\u0440\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0438\u0441\u043a\u0435 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a\u0438\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438\u0441\u043a\u043e\u043c\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u043a\u0438. \u0413\u0443\u0433\u043b\u0443 \u043d\u0435 \u0432\u0430\u0436\u043d\u0430 \u043a\u0440\u0430\u0441\u043e\u0442\u0430 \u0438 \u0433\u0440\u0430\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u0430, \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0438\u043c\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0441\u043b\u043e\u0432, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u043d \u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442.<\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0440\u0435\u0448\u0430\u0435\u043c\u044b\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432:<br \/>   \u2014 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c R-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u0438\u0437 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u2014 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0433\u0443\u0433\u043b: <a href=\"https:\/\/www.google.ru\/webhp?q=opencv+get+single+component\">google: opencv get single channel<\/a>, \u0438 \u043f\u0435\u0440\u0432\u0430\u044f \u0436\u0435 \u0441\u0441\u044b\u043b\u043a\u0430 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 Split<br \/>   \u2014 \u043d\u0430\u0439\u0442\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438: <a href=\"https:\/\/www.google.ru\/webhp?q=opencv+difference+images\">google: opencv difference images<\/a>, \u0438 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0436\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f absdiff. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0432\u043e compare \u0432\u043c\u0435\u0441\u0442\u043e difference, \u0442\u043e \u0433\u0443\u0433\u043b \u043d\u0430\u0447\u043d\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0438 \u044d\u0442\u043e \u0434\u0430\u0441\u0442 \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0449\u0438\u0435 \u043e\u0442\u0432\u0435\u0442\u044b \u0441 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c \u0438 \u0442.\u0434. \u042d\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u0430 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0441\u043b\u043e\u0432 \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u0441\u0432\u043e\u0439 \u0432\u043e\u043f\u0440\u043e\u0441.<\/p>\n<h4>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c .net-wrapper \u0434\u043b\u044f OpenCv<\/h4>\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432\u044b\u0431\u0440\u0430\u043b\u0438, \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u0440\u0443\u0436\u0438\u0442\u044c \u0435\u0435 \u0441 C#-\u043e\u043c. \u042d\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0443\u0436\u0435 \u0440\u0435\u0448\u0435\u043d\u0430 \u0434\u043e \u043d\u0430\u0441, \u0438 \u043d\u0430\u043c \u043e\u043f\u044f\u0442\u044c \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0431\u043e\u0440 \u043c\u0435\u0436\u0434\u0443 \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438. \u0420\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 wrapper-\u0430 \u0434\u0432\u0430: <a href=\"http:\/\/www.emgu.com\">Emgu Cv<\/a> \u0438 <a href=\"https:\/\/github.com\/shimat\/opencvsharp\">OpenCvSharp<\/a>. Emgu Cv \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0440\u0430\u044f \u0438 \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043d\u0434\u043e\u0432\u0430\u044f, OpenCvSharp \u0431\u043e\u043b\u0435\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f. \u0412\u044b\u0431\u043e\u0440 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 OpenCvSharp, \u043f\u043e\u0434\u043a\u0443\u043f\u0438\u043b\u0438 \u0441\u043b\u043e\u0432\u0430 \u0430\u0432\u0442\u043e\u0440\u0430 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f IDisposable. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u0440 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e 1 \u0432 1 \u043f\u0435\u0440\u0435\u043d\u0435\u0441 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 C\/C++ \u0432 C#, \u043d\u043e \u0438 \u0434\u043e\u043f\u0438\u043b\u0438\u043b \u0438\u0445 \u043d\u0430\u043f\u0438\u043b\u044c\u043d\u0438\u043a\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u0431\u044b\u043b\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 C#-\u0441\u0442\u0438\u043b\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430.<\/p>\n<h5>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c OpenCvSharp \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443<\/h5>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 OpenCvSharp \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043e\u0441\u043e\u0431\u044b\u0445 \u0437\u0430\u043a\u0430\u0432\u044b\u043a. \u0415\u0441\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 <a href=\"https:\/\/github.com\/shimat\/opencvsharp\/wiki\/Tutorial-for-Windows\">tutorial<\/a> \u043e\u0442 \u0430\u0432\u0442\u043e\u0440\u0430, \u0442\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f <a href=\"https:\/\/www.nuget.org\/packages\/OpenCvSharp-x64\/\">OpenCvSharp \u0447\u0435\u0440\u0435\u0437 nuget<\/a>.<\/p>\n<h4>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/h4>\n<p>OpenCv \u0438\u043c\u0435\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438. \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438\u0437 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. OpenCv \u0438\u043c\u0435\u0435\u0442 \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f: C-\u0441\u0442\u0438\u043b\u044c \u0438 C++-\u0441\u0442\u0438\u043b\u044c. \u0414\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c C++-\u0441\u0442\u0438\u043b\u044c (\u0432\u0435\u0440\u043d\u0435\u0435 \u0435\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433 \u0447\u0435\u0440\u0435\u0437 OpenCvSharp).<\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u0430 \u0434\u0432\u0430: Mat \u0438 Cv2. \u041e\u0431\u0430 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 namespace-\u0435 OpenCvSharp.CPlusPlus. Mat \u2014 \u044d\u0442\u043e \u0441\u0430\u043c\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0430 Cv2 \u2014 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043d\u0430\u0434 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438.<br \/>  \u0424\u0443\u043d\u043a\u0446\u0438\u0438:  <\/p>\n<pre><code class=\"cs\">\/\/\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f var mat = new Mat(&quot;test.bmp&quot;);  \/\/\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f mat.ImWrite(&quot;out.bmp&quot;);  \/\/\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 bitmap var bmp = mat.ToBitmap();  \/\/\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 bitmap (\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 OpenCvSharp.Extensions) var mat2 = new Mat(bmp.ToIplImage(), true);   \/\/\u043f\u043e\u043a\u0430\u0437 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f using (new Window(&quot;\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435&quot;, mat)) {    Cv2.WaitKey(); }  \/\/\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0437 \u0446\u0432\u0435\u0442\u043d\u043e\u0433\u043e \u0432 \u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u043e\u0433\u043e) Cv2.CvtColor(mat, dstMat, ColorConversion.RgbToGray);  \/\/\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b Cv2.Split(mat, out mat_channels)  \/\/\u0441\u0431\u043e\u0440\u043a\u0430 \u043c\u043d\u043e\u0433\u043e\u0446\u0432\u0435\u0442\u043d\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u0437 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 Cv2.Merge(mat_channels, mat)  \/\/\u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 Cv2.Absdiff(mat1, mat2, dstMat);  \/\/\u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u043e\u0447\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0435\u043c\u043d\u0435\u0435\/\u0441\u0432\u0435\u0442\u043b\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f(50) \u043a \u0447\u0435\u0440\u043d\u043e\u043c\u0443(0) \u0438\u043b\u0438 \u0431\u0435\u043b\u043e\u043c\u0443 \u0446\u0432\u0435\u0442\u0443(255) Cv2.Threshold(mat, dstMat, 50, 255, OpenCvSharp.ThresholdType.Binary);  \/\/\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 mat.Circle(x, y, radius, new Scalar(b, g, r)); mat.Line(x1, y1, x2, y2, new CvScalar(b, g, r)); mat.Rectangle(new Rect(x, y, width, height), new Scalar(b, g, r)); mat.Rectangle(new Rect(x, y, width, height), new Scalar(b, g, r), -1); \/\/\u0437\u0430\u043a\u0440\u0430\u0448\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a mat.PutText(&quot;test&quot;, new OpenCvSharp.CPlusPlus.Point(x, y), FontFace.HersheySimplex, 2, new Scalar(b, g, r))  <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0432 OpenCv \u0435\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432(<a href=\"http:\/\/docs.opencv.org\/modules\/imgproc\/doc\/structural_analysis_and_shape_descriptors.html\">Structural Analysis and Shape Descriptors<\/a>, <a href=\"http:\/\/docs.opencv.org\/modules\/imgproc\/doc\/motion_analysis_and_object_tracking.html\">Motion Analysis and Object Tracking<\/a>, <a href=\"http:\/\/docs.opencv.org\/modules\/imgproc\/doc\/feature_detection.html\">Feature Detection<\/a>, <a href=\"http:\/\/docs.opencv.org\/modules\/imgproc\/doc\/object_detection.html\">Object Detection<\/a>), \u043d\u043e \u043d\u0430\u0441\u043a\u043e\u043a\u043e\u043c \u0432\u044b\u0436\u0430\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c (<i>\u043d\u0430\u0434\u043e, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u043a\u043d\u0438\u0436\u043a\u0443 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c<\/i>), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0438\u0445 \u043d\u0430 \u043f\u043e\u0442\u043e\u043c.<\/p>\n<h4>\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432<\/h4>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u043d\u0438\u044e \u0444\u0438\u043b\u044c\u0442\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0441\u0435\u0447\u0435\u0442 \u0444\u043e\u043d \u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f Zuma-\u044b \u043e\u0447\u0435\u043d\u044c \u043f\u0435\u0441\u0442\u0440\u043e\u0435, \u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043e\u0442\u0441\u0435\u0447\u043a\u0430 \u043f\u043e \u044f\u0440\u043a\u043e\u0441\u0442\u0438 \u043d\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442. \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0435\u0435 \u0447\u0435\u0440\u043d\u043e-\u0431\u0435\u043b\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0438 \u043b\u0435\u0441\u0435\u043d\u043a\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u0442\u0441\u0435\u0447\u0435\u043a. \u041d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0444\u043e\u043d \u0441\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u0448\u0430\u0440\u0430\u043c\u0438, \u0438\u043b\u0438 \u043b\u0438\u0431\u043e \u0438 \u0442\u043e, \u0438 \u0434\u0440\u0443\u0433\u043e\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u043b\u0438\u0431\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u2014 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/124\/936\/092\/124936092568d12786c488dee611708a.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/16e\/62c\/1fa\/16e62c1fa6b2647b9b5f70f5adfbe7b6.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/777\/efd\/68a\/777efd68a129a75b1144593433cc1dd9.png\"\/><\/p>\n<p>  \u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u044f\u0435\u0442 \u0438\u0445 \u00ab\u043f\u043e\u043b\u043e\u0441\u0430\u0442\u043e\u0441\u0442\u044c\u00bb. \u0412\u043e\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f Canny, \u0432\u044b\u0434\u0435\u043b\u044f\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0442\u0443\u0440\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/029\/cb9\/fee\/029cb9fee3eef443ea06a9c58df962f3.png\"\/><\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0436\u0438\u0437\u043d\u044c \u043b\u0443\u0447\u0448\u0435 \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/134\/40e\/2ca\/13440e2ca46c14757a3865069762af56.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/0c8\/57c\/c79\/0c857cc79c64fc3e4633e9f389f43677.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/8f1\/a04\/07b\/8f1a0407bcd5fa7496e7c0fd6e3fc6c5.png\"\/><br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/759\/9f6\/3bb\/7599f63bb90700e86e0e6fce8bac05ab.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/568\/df2\/304\/568df2304e2621d3d7dce2935c4ce188.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/df2\/874\/42d\/df287442dc8bfc9592fe7732e6d11b5c.png\"\/><\/p>\n<h4>\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u0432\u0438\u0436\u0443\u0449\u0438\u0445\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432<\/h4>\n<p>\u041e\u0441\u043d\u043e\u0432\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u0432\u0438\u0436\u0443\u0448\u0438\u0445\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u2014 \u043f\u0440\u043e\u0441\u0442\u0430: \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430 \u2014 \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0442\u043e\u0447\u043a\u0438 \u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0441\u043a\u043e\u043c\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0432\u0441\u0451 \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0438 \u0434\u044c\u044f\u0432\u043e\u043b, \u043a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430, \u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0432 \u043c\u0435\u043b\u043e\u0447\u0430\u0445\u2026<\/p>\n<h5>\u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0438\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438<\/h5>\n<p>\u0414\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0440\u0438\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043e\u0434 \u0432 \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u043e\u0442\u0430. \u0411\u043e\u0442 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0442\u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043a\u0430\u0434\u0440\u043e\u0432, \u0438 \u043f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e \u043d\u0430 \u043f\u0440\u043e\u0431\u0435\u043b \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u043d\u0430 \u0434\u0438\u0441\u043a.  <\/p>\n<pre><code>      var history = new List&lt;Bitmap&gt;();       for (var tick = 0; ;tick++)       {           var bmp = GetScreenImage(gameScreenRect);           history.Insert(0, bmp);           const int maxHistoryLength = 10;           if (history.Count &gt; maxHistoryLength)             history.RemoveRange(maxHistoryLength, history.Count - maxHistoryLength);            if (Console.KeyAvailable)           {             var keyInfo = Console.ReadKey();             if (keyInfo.Key == ConsoleKey.Spacebar)             {               for (var i = 0; i &lt; history.Count; ++i)                 history[i].Save(string.Format(&quot;{0}.png&quot;, i));             }             [..]           }           [..]       } <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c, \u0436\u043c\u0435\u043c \u0438 \u0432\u0443\u0430\u043b\u044f \u2014 \u0443 \u043d\u0430\u0441 \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043a\u0430\u0434\u0440\u0430. <br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/b21\/ad2\/45c\/b21ad245cdd967fe323b65844d9cc531.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/ca9\/023\/14c\/ca902314cd084f23c052c340c2d049ee.png\"\/><\/p>\n<h5>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445<\/h5>\n<p>\u0412\u044b\u0447\u0438\u0442\u0430\u0435\u043c \u043e\u0434\u043d\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e\u2026 \u0438 \u0447\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u00ab\u0441\u043c\u0435\u0448\u0430\u043b\u0438\u0441\u044c \u0432 \u043a\u0443\u0447\u0443 \u043a\u043e\u043d\u0438, \u043b\u044e\u0434\u0438\u00bb. \u0428\u0430\u0440\u044b \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0438\u0441\u044c \u0432\u043e \u0447\u0442\u043e-\u0442\u043e \u00ab\u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435\u00bb (\u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0438\u0434\u043d\u043e, \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435), \u043d\u043e \u044d\u0442\u043e \u043b\u0430\u0434\u043d\u043e, \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0447\u0442\u043e \u0448\u0430\u0440\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043e\u0442\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0442 \u0444\u043e\u043d\u0430.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/ac2\/863\/853\/ac2863853e0389309888144bc6a33d63.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/425\/a1c\/3eb\/425a1c3ebad1249228d6164255d08cc8.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/bb3\/878\/1fd\/bb38781fdb802ea8c7551654eed9d2ed.png\"\/><\/p>\n<h5>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0444\u043e\u043d\u043e\u043c<\/h5>\n<p>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043a\u0430\u0434\u0440\u043e\u0432 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u00ab\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u043e\u044f\u0449\u0438\u0445\u00bb \u0434\u0432\u0438\u0436\u0443\u0449\u0438\u0445\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043b\u043e\u0442\u043d\u043e \u0434\u0432\u0438\u0436\u0443\u0449\u0438\u0435\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u043c \u0444\u043e\u043d\u043e\u043c.<br \/>  \u041f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u0444\u043e\u043d:<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/754\/dcd\/7be\/754dcd7bea0b4b9a9b09899eebb56d46.png\"\/><br \/>  \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c:<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/940\/1f1\/a02\/9401f1a023f82a6ee65bb048b496c4ce.png\"\/><br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/186\/f8c\/ecc\/186f8cecc602d51ba8f306f76beac931.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/88a\/ede\/2c0\/88aede2c0a29a82c1c7007642baacfd3.png\"\/><br \/>  \u041c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435, \u043d\u043e \u0432\u0441\u0451 \u043f\u043e\u0440\u0442\u044f\u0442 \u0442\u0435\u043d\u0438. \u041e\u0442 \u0442\u0435\u043d\u0435\u0439 \u044f \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432, \u043d\u043e \u0441\u0430\u043c\u044b\u0439 \u043b\u0443\u0447\u0448\u0438\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u0434\u0430\u043b\u0430 \u043c\u044b\u0441\u043b\u044c, \u0447\u0442\u043e \u0442\u0435\u043d\u044c, \u043f\u043e \u0441\u0443\u0442\u0438, \u0435\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u044f\u0440\u043a\u043e\u0441\u0442\u0438, \u0430 \u044d\u0442\u043e \u0443\u0436\u0435 \u043c\u0435\u043d\u044f \u043d\u0430\u0432\u0435\u043b\u043e \u043d\u0430 \u043c\u044b\u0441\u043b\u044c \u043e \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 HSV.<\/p>\n<h4>HSV<\/h4>\n<p><img decoding=\"async\" align=\"right\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/ddb\/179\/8d8\/ddb1798d838dc08a919f934719d9124b.png\"\/>\u0426\u0432\u0435\u0442\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c HSV, \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 RGB, \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0442\u0440\u0435\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432. \u041d\u043e \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u043d\u0435\u0433\u043e (\u0438 \u0442\u043e\u0433\u043e \u0436\u0435 CMYK) \u2014 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043c\u0435\u0448\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u043e\u0432.<br \/>   \u2014 \u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u0430\u043d\u0430\u043b, H(Hue) \u2014 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u0442\u043e\u043d. \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0438, \u044d\u0442\u043e \u043d\u043e\u043c\u0435\u0440 \u0446\u0432\u0435\u0442\u0430 \u0438\u0437 \u0440\u0430\u0434\u0443\u0433\u0438.<br \/>   \u2014 \u0412\u0442\u043e\u0440\u043e\u0439 \u043a\u0430\u043d\u0430\u043b, S(Saturation) \u2014 \u043d\u0430\u0441\u044b\u0449\u0435\u043d\u043d\u043e\u0441\u0442\u044c. \u0427\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430, \u0442\u0435\u043c \u0446\u0432\u0435\u0442 \u0431\u043b\u0438\u0436\u0435 \u043a \u0441\u0435\u0440\u043e\u043c\u0443, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u2014 \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0446\u0432\u0435\u0442 \u0432\u044b\u0440\u0430\u0436\u0435\u043d. \u0426\u0432\u0435\u0442\u0430 \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u043d\u0430\u0441\u044b\u0449\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u043f\u043e\u0434 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043d\u044b\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u2014 \u00ab\u043a\u0438\u0441\u043b\u043e\u0442\u043d\u044b\u0435\u00bb.<br \/>   \u2014 \u0422\u0440\u0435\u0442\u0438\u0439 \u043a\u0430\u043d\u0430\u043b, V(Value) \u2014 \u044f\u0440\u043a\u043e\u0441\u0442\u044c. \u042d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u044b\u0439 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043a\u0430\u043d\u0430\u043b, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u0442\u0435\u043c \u0432\u044b\u0448\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u0430\u043d\u0430\u043b\u0443.<br \/>  \u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0441\u043f\u0440\u0430\u0432\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u044c \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0438 \u0446\u0432\u0435\u0442\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439. \u041f\u043e \u043a\u0440\u0443\u0433\u0443 \u0438\u0434\u0435\u0442 \u0440\u0430\u0434\u0443\u0433\u0430 \u2014 \u044d\u0442\u043e \u043a\u0430\u043d\u0430\u043b H. \u0422\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430 (\u0441\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e \u043a\u0440\u0430\u0441\u043d\u044b\u0439) \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u0430\u043d\u0430\u043b\u0430 S \u2014 \u043d\u0430\u0441\u044b\u0449\u0435\u043d\u043d\u043e\u0441\u0442\u0438 (\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u0432\u0435\u0440\u0445-\u043f\u0440\u0430\u0432\u043e) \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u0430\u043d\u0430\u043b\u0430 V \u2014 \u044f\u0440\u043a\u043e\u0441\u0442\u0438 (\u0432 \u0432\u0435\u0440\u0445-\u043b\u0435\u0432\u043e). \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u043d\u0430\u043b\u0430 H \u043b\u0435\u0436\u0430\u0442 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 0-360, S \u2014 0-100, V \u2014 0-100. \u0412 OpenCv \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043a \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0443 0-255 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e-\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430.<\/p>\n<p>  \u0426\u0432\u0435\u0442\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c RGB \u0431\u043b\u0438\u0437\u043a\u0430 \u043a \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0433\u043b\u0430\u0437\u0443, \u043a \u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u043e\u043d \u0443\u0441\u0442\u0440\u043e\u0435\u043d. \u0426\u0432\u0435\u0442\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c HSV \u0431\u043b\u0438\u0437\u043a\u0430 \u043a \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u0446\u0432\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u0437\u0433\u043e\u043c. \u041d\u0438\u0436\u0435 \u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u043b \u0441\u0435\u0440\u0438\u044e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 \u043f\u043b\u044e\u0441\/\u043c\u0438\u043d\u0443\u0441 50 \u043f\u043e\u043f\u0443\u0433\u0430\u0435\u0432. \u041d\u0430 \u043d\u0438\u0445 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u043d\u0430\u043b\u043e\u0432 S \u0438 V \u043d\u0430 100 \u0435\u0434\u0438\u043d\u0438\u0446 (\u0430 \u044d\u0442\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430) \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0430 \u0432\u043e\u0442 \u0434\u0430\u0436\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u0430\u043d\u0430\u043b\u0430 H \u0441\u0438\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u0435, \u0434\u0435\u043b\u0430\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u00ab\u043d\u0430\u0440\u043a\u043e\u043c\u0430\u043d\u0441\u043a\u0438\u043c\u00bb. \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043c\u043e\u0437\u0433 \u0437\u0430 \u0434\u043e\u043b\u0433\u0438\u0435 \u0433\u043e\u0434\u044b \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438 \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044f\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u043c\u0435\u043d\u0435\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0445. <\/p>\n<p>  \u0427\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u00ab\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435\u00bb? \u042d\u0442\u043e \u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0442 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439. \u0412\u043e\u0437\u044c\u043c\u0435\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0435\u0434\u043c\u0435\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0434\u043d\u043e\u0442\u043e\u043d\u043d\u044b\u0439 \u043c\u044f\u0447\u0438\u043a. \u041e\u043d \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c, \u043d\u043e \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439: \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u0437\u0434\u0443\u0445\u0430, \u043e\u0442\u0441\u0432\u0435\u0442\u0430 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0442.\u0434. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0435\u0441\u043b\u0438 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043c\u044f\u0447\u0438\u043a \u0438\u0437 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0433\u043e \u043c\u0438\u0440\u0430 \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u0443 \u0447\u0430\u0441\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043b\u0430\u0431\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439, \u0438 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0443 \u0447\u0430\u0441\u0442\u044c, \u0447\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e. \u041d\u0430\u0438\u043c\u0435\u043d\u0435\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u044f\u0440\u043a\u043e\u0441\u0442\u044c (\u043a\u0430\u043d\u0430\u043b V): \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043b\u0438\u0441\u044c \u0432 \u0442\u0435\u043d\u044c \u0438 \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0433\u043e \u043c\u0438\u0440\u0430 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0430\u0441\u044c, \u043d\u0435\u0431\u043e \u0437\u0430\u0442\u044f\u043d\u0443\u043b\u043e \u0442\u0443\u0447\u0430\u043c\u0438 \u2014 \u0438 \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u043e\u043f\u044f\u0442\u044c \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0430\u0441\u044c. \u041d\u0430\u0441\u044b\u0449\u0435\u043d\u043d\u043e\u0441\u0442\u044c (\u043a\u0430\u043d\u0430\u043b S) \u0442\u0430\u043a\u0436\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u0434\u043d\u044f, \u0442\u043e\u0447\u043d\u0435\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 \u2014 \u0447\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0430\u044e\u0442 \u0432\u043a\u043b\u0430\u0434 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/%CA%EE%EB%E1%EE%F7%EA%E8\">\u043a\u043e\u043b\u0431\u043e\u0447\u043a\u0438<\/a> (\u0447\u0435\u0440\u043d\u043e-\u0431\u0435\u043b\u043e\u0435 \u0437\u0440\u0435\u043d\u0438\u0435) \u0438 \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0442 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D0%B0%D0%BB%D0%BE%D1%87%D0%BA%D0%B8_(%D1%81%D0%B5%D1%82%D1%87%D0%B0%D1%82%D0%BA%D0%B0)\">\u043f\u0430\u043b\u043e\u0447\u0435\u043a<\/a> (\u0446\u0432\u0435\u0442\u043d\u043e\u0435 \u0437\u0440\u0435\u043d\u0438\u0435). \u0426\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u0442\u043e\u043d (\u043a\u0430\u043d\u0430\u043b H) \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0430\u0431\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u0446\u0432\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/f01\/c8e\/c5f\/f01c8ec5f7984a3bdd62ae89ae9439f9.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/766\/a8f\/135\/766a8f13549db900dc3eedc88e244cf9.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/1b1\/22e\/f76\/1b122ef7608938da9a065d30c41c4581.png\"\/><br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/4aa\/c38\/bac\/4aac38bac2b418aee4df48e3ec6c156c.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/ba8\/3d9\/c73\/ba83d9c73facde311a278a7537b78d50.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/a59\/375\/7eb\/a593757eb6a45379514cb42c6241b871.png\"\/><br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/df9\/097\/170\/df90971707caa537261e6f987da3ea12.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/8d0\/70b\/322\/8d070b32219e75596dfbb33db018950f.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/da1\/528\/e6c\/da1528e6c9843d17d9906a202495493f.png\"\/><br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/72d\/558\/0ee\/72d5580eed43bce5eb65a16d32942bfe.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/6ef\/c07\/418\/6efc07418f8ff66a2ce8e2e348af3044.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/c0a\/2aa\/a03\/c0a2aaa037707d4098b4398ca6a05943.png\"\/><br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/747\/263\/d0b\/747263d0b5c3cb2d2a946d3f23615ccc.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/113\/047\/26a\/11304726ae16bd95a774e662d94ae347.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/175\/137\/f76\/175137f76ef37812fd3dea71fb25f08d.png\"\/><\/p>\n<h5>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 \u0444\u043e\u043d\u043e\u043c \u0432 hsv-\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435<\/h5>\n<p>\u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u0435 \u0438\u0437 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0444\u043e\u043d\u0430, \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e hsv, \u0438 \u041e! \u0427\u0443\u0434\u043e! \u0412 \u043a\u0430\u043d\u0430\u043b\u0430\u0445 H \u0438 S \u0448\u0430\u0440\u0438\u043a\u0438 \u0447\u0435\u0442\u043a\u043e \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u044b \u043e\u0442 \u0442\u0435\u043d\u0435\u0439, \u0432\u0441\u0435 \u0442\u0435\u043d\u0438 \u043f\u043e\u0447\u0442\u0438 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0443\u0448\u043b\u0438 \u0432 \u043a\u0430\u043d\u0430\u043b V. \u0412 H-\u043a\u0430\u043d\u0430\u043b\u0435 \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u00ab\u0438\u0437\u0440\u0435\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c\u00bb \u0448\u0430\u0440\u0438\u043a\u043e\u0432, \u043d\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0436\u0435\u043b\u0442\u044b\u0435 \u0448\u0430\u0440\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0441\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u0444\u043e\u043d\u043e\u043c. \u0412 S-\u043a\u0430\u043d\u0430\u043b\u0435 \u0438\u0437\u0440\u0435\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u0437\u0430\u0442\u043e \u0432\u0441\u0435 \u0448\u0430\u0440\u044b \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0438\u0434\u043d\u044b, \u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0432 \u0434\u0432\u0443\u0445\u0446\u0432\u0435\u0442\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 (\u0441 \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u0438\u0435\u043c \u00ab\u043c\u0443\u0441\u043e\u0440\u0430\u00bb \u043c\u0435\u043d\u044c\u0448\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f 25) \u0434\u0430\u0435\u0442 \u0447\u0435\u0442\u043a\u0438\u0435 \u043a\u0440\u0443\u0433\u0438 \u0438 \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u0441\u0451 \u043b\u0438\u0448\u043d\u0435\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/1c8\/c16\/42f\/1c8c1642f7c7224f35a1c366a44eed5e.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/f0a\/b0b\/b15\/f0ab0bb15ba171a57c9bf3a274a52cb0.png\"\/><\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/1e2\/1e9\/862\/1e21e98629a8569054e7c6d4586a4aa0.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/c14\/921\/a47\/c14921a4777f4880159dde433fa15dd5.png\"\/><\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/f65\/619\/4eb\/f656194eb95b07c0f98f84e10073e621.png\"\/><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/12f\/46a\/59a\/12f46a59a628a7491fef757842eaaef8.png\"\/><\/p>\n<p>  \u041f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0446\u0435\u043b\u044c \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u0430 (\u0448\u0430\u0440\u044b \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u044b \u043e\u0442 \u0444\u043e\u043d\u0430 \u0438 \u043e\u0442 \u0441\u0432\u043e\u0438\u0445 \u0442\u0435\u043d\u0435\u0439), \u0438 \u0441\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e\u0439 \u0434\u0443\u0448\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0434\u0442\u0438 \u0441\u043f\u0430\u0442\u044c.<\/p>\n<p>  ps<br \/>  \u0412\u0441\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f OpenCV (\u043a\u043e\u0434 \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c).  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>      var resizeK = 0.2;        var dir = &quot;Example\/&quot;;        var src = new Mat(&quot;0.bmp&quot;);       var src_g = new Mat(&quot;0.bmp&quot;, LoadMode.GrayScale);        var src_1 = new Mat(&quot;1.bmp&quot;);       var src_1_g = new Mat(&quot;1.bmp&quot;, LoadMode.GrayScale);        var background = new Mat(&quot;background.bmp&quot;);       var background_g = new Mat(&quot;background.bmp&quot;, LoadMode.GrayScale);        src.Resize(resizeK).ImWrite(dir + &quot;0.png&quot;);       src_g.Resize(resizeK).ImWrite(dir + &quot;0 g.png&quot;);       src_g.ThresholdStairs().Resize(resizeK).ImWrite(dir + &quot;0 g th.png&quot;);        var canny = new Mat();       Cv2.Canny(src_g, canny, 50, 200);       canny.Resize(0.5).ImWrite(dir + &quot;0 canny.png&quot;);        Mat[] src_channels;       Cv2.Split(src, out src_channels);        for (var i = 0; i &lt; src_channels.Length; ++i)       {         var channels = Enumerable.Range(0, src_channels.Length).Select(j =&gt; 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(&quot;0 ch{0}.png&quot;, i));         src_channels[i].ThresholdStairs().Resize(resizeK).ImWrite(dir + string.Format(&quot;0 ch{0} th.png&quot;, i));       }        if (true)       {         src.Resize(0.4).ImWrite(dir + &quot;0.png&quot;);         src_1.Resize(0.4).ImWrite(dir + &quot;1.png&quot;);         background.Resize(0.4).ImWrite(dir + &quot;bg.png&quot;);          var dst_01 = new Mat();         Cv2.Absdiff(src, src_1, dst_01);         dst_01.Resize(resizeK).ImWrite(dir + &quot;01.png&quot;);         dst_01.Cut(new Rect(50, src.Height * 4 \/ 5 - 50, src.Width \/ 5, src.Height \/ 5)).ImWrite(dir + &quot;01 part.png&quot;);         dst_01.Cut(new Rect(50, src.Height * 4 \/ 5 - 50, src.Width \/ 5, src.Height \/ 5)).CvtColor(ColorConversion.RgbToGray).ImWrite(dir + &quot;01 g.png&quot;);         dst_01.CvtColor(ColorConversion.RgbToGray).ThresholdStairs().Resize(resizeK).ImWrite(dir + &quot;01 g th.png&quot;);          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 + &quot;0g1g.png&quot;);         dst_01_g.ThresholdStairs().Resize(resizeK).ImWrite(dir + &quot;0g1g th.png&quot;);       }        if (true)       {         var dst_0b = new Mat();         Cv2.Absdiff(src, background, dst_0b);         dst_0b.Resize(0.6).ImWrite(dir + &quot;0b.png&quot;);          var dst_0b_g = new Mat();         Cv2.Absdiff(src_g, background_g, dst_0b_g);         dst_0b_g.Resize(0.3).ImWrite(dir + &quot;0b g.png&quot;);         dst_0b_g.ThresholdStairs().Resize(0.3).ImWrite(dir + &quot;0b g th.png&quot;);       }       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 &lt; 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 + &quot;all.png&quot;);         }          foreach (var pair in new[] { &quot;h&quot;, &quot;s&quot;, &quot;v&quot; }.Select((channel, index) =&gt; 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(&quot;0b {0}.png&quot;, pair.channel));           diff.ThresholdStairs().Resize(0.3).ImWrite(dir + string.Format(&quot;0b {0} th.png&quot;, pair.channel));            hsv_src_channels[pair.index].Resize(resizeK).With_Title(pair.channel).ImWrite(dir + string.Format(&quot;0 {0}.png&quot;, 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 &gt;= 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) =&gt; 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(&quot;{0} {1:+#;-#}&quot;, pair.channel, d)).ImWrite(dir + string.Format(&quot;0 {0}{1}.png&quot;, 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 &lt; 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 &lt; 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;     }    } <\/code><\/pre>\n<\/div>\n<\/div>\n<hr\/>\n<p><a href=\"http:\/\/habrahabr.ru\/post\/214955\/\">\u0411\u043e\u0442 \u0434\u043b\u044f DirectX-\u0430\u0440\u043a\u0430\u0434\u044b. \u0427\u0430\u0441\u0442\u044c \u21161: \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442<\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/post\/216757\/\">\u0411\u043e\u0442 \u0434\u043b\u044f \u0430\u0440\u043a\u0430\u0434\u044b. \u0427\u0430\u0441\u0442\u044c \u21162: \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c OpenCv<\/a><\/p>\n<hr\/>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/216757\/\"> http:\/\/habrahabr.ru\/post\/216757\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">\n<h4>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h4>\n<p><img decoding=\"async\" align=\"right\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/3eb\/189\/42d\/3eb18942ddc34126657bfa2a7b770485.png\"\/>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c <s>\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u0438\u0440\u043e\u043c<\/s> \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u0442\u0430 \u0434\u043b\u044f \u0438\u0433\u0440\u044b. \u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d: \u043c\u044b\u0448\u044c \u0431\u0435\u0433\u0430\u0435\u0442, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f. \u041f\u043e\u0440\u0430 \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u044d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u041c\u043e\u0436\u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0438\u0437\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u043e \u043b\u0443\u0447\u0448\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u043c\u0438 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0448\u0438\u0440\u043e\u043a\u043e\u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"http:\/\/opencv.org\/\">OpenCv<\/a>. \u041e\u043d\u0430 \u043d\u0435\u0440\u043e\u0434\u043d\u0430\u044f (unmanaged) \u0434\u043b\u044f .net, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0435\u0435 \u0447\u0435\u0440\u0435\u0437 wrapper <a href=\"https:\/\/github.com\/shimat\/opencvsharp\">OpenCvSharp<\/a>.<\/p>\n<p>  OpenCv \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438, \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0442\u0434\u0435\u043b\u0438\u0442 \u0444\u043e\u043d \u0438 \u0442\u0435\u043d\u0438 \u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430. \u041a \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 \u0438 \u0431\u0443\u0434\u0435\u043c \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f.<\/p>\n<hr\/>\n<p><b>\u0417\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0442\u0435\u043c\u044b<\/b>: <i>\u0432\u044b\u0431\u043e\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0432\u044b\u0431\u043e\u0440 wrapper-\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 OpenCv, \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 OpenCv, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u0432\u0438\u0436\u0443\u0449\u0438\u0445\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0446\u0432\u0435\u0442\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c HSV.<br \/>  <\/i><\/p>\n<hr\/>\n<p>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-216757","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/216757","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=216757"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/216757\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=216757"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=216757"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=216757"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}