{"id":8056,"date":"2018-07-19T20:36:25","date_gmt":"2018-07-19T11:36:25","guid":{"rendered":"http:\/\/r-dimension.xsrv.jp\/classes_j\/?p=8056"},"modified":"2018-08-01T18:29:53","modified_gmt":"2018-08-01T09:29:53","slug":"face_recognition_ios1","status":"publish","type":"post","link":"https:\/\/r-dimension.xsrv.jp\/classes_j\/face_recognition_ios1\/","title":{"rendered":"openFrameworks\u3067iOS\u306e\u81ea\u64ae\u308a\u30ab\u30e1\u30e9\u3092\u4f5c\u308b-1"},"content":{"rendered":"<p>\u8fd1\u5e74\u3001Snow\u3084SnapChat\u306a\u3069\u306e\u81ea\u64ae\u308a\u30a2\u30d7\u30ea\u304c\u76db\u6cc1\u3067\u3059\u304c\u3001\u5b9f\u969b\u306b\u81ea\u5206\u3067\u958b\u767a\u3057\u3088\u3046\u3068\u306a\u308b\u3068\u306a\u304b\u306a\u304b\u30cf\u30fc\u30c9\u30eb\u304c\u9ad8\u3044\u306e\u304c\u73fe\u72b6\u3067\u3059\u3002\u7279\u306b\u9854\u8a8d\u8b58\u3084\u8868\u60c5\u8a8d\u8b58\u306f\u7121\u6599\u3067\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u958b\u767a\u74b0\u5883\u304c\u3042\u307e\u308a\u306a\u304f\u3001\u6709\u6599\u306e\u3082\u306e\u306f\u500b\u4eba\u304c\u8cfc\u5165\u3067\u304d\u308b\u30ec\u30d9\u30eb\u306e\u4fa1\u683c\u3067\u306a\u3044\u3053\u3068\u304c\u591a\u3044\u3088\u3046\u3067\u3059\u3002<br \/>\nopenFramework\uff08OF\uff09\u3067\u306f\u6bd4\u8f03\u7684\u53e4\u304f\u304b\u3089ofxFaceTracker\u3068\u3044\u3046\u30a2\u30c9\u30aa\u30f3\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u3053\u306e\u30a2\u30c9\u30aa\u30f3\u306f\u5b9a\u671f\u7684\u306b\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3055\u308c\u3066\u304a\u308a\u30012018\u5e747\u6708\u6642\u70b9\u306e\u6700\u65b0\u7248\u3067\u3042\u308b\u30d0\u30fc\u30b8\u30e7\u30f30.10.0\u306b\u3082\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u3053\u3053\u3067\u306f\u3001\u307e\u305a\u306f\u3058\u3081\u306bofxCV\u3068\u3044\u3046\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30d3\u30b8\u30e7\u30f3\u306e\u30a2\u30c9\u30aa\u30f3\u3092\u4f7f\u3063\u3066\u3001\u30ab\u30e1\u30e9\u306e\u6620\u50cf\u306b\u30a8\u30d5\u30a7\u30af\u30c8\u3092\u304b\u3051\u3066\u307f\u307e\u3059\u3002\u305d\u3057\u3066\u6b21\u306b\u3001ofxFaceTracker\u3092\u4f7f\u3063\u305f\u81ea\u64ae\u308a\u30a2\u30d7\u30ea\u3092\u4f5c\u6210\u3059\u308b\u624b\u9806\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002\u81ea\u64ae\u308a\u30a2\u30d7\u30ea\u306f\u8003\u3048\u65b9\u6b21\u7b2c\u3067\u306f\u307e\u3060\u307e\u3060\u3044\u308d\u3093\u306a\u30a2\u30a4\u30c7\u30a2\u304c\u51fa\u305b\u308b\u9818\u57df\u3067\u3082\u3042\u308b\u306e\u3067\u3001\u982d\u3092\u67d4\u3089\u304b\u304f\u3057\u3066\u30a2\u30a4\u30c7\u30a2\u3092\u51fa\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><!--more--><\/p>\n<h1>ofxCV\u30a2\u30c9\u30aa\u30f3\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3068\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h1>\n<p>ofxCV\u3092github\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3059\u3002<br \/>\n<a href=\"https:\/\/github.com\/kylemcdonald\/ofxCv\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/kylemcdonald\/ofxCv<\/a><\/p>\n<p><strong>OF stable (0.9.8): use ofxCv\/stable<br \/>\nOF master (0.10.0): use ofxCv\/master<\/strong><\/p>\n<p>\u3068\u3042\u308b\u306e\u3067\u3001\u4eca\u56de\u306fOF\u306f0.10.0\u3092\u4f7f\u3046\u306e\u3067\u3001master\u3092\u305d\u306e\u307e\u307e\u4f7f\u3044\u307e\u3059\u3002<\/p>\n<p><a href=\"http:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/GitHub_-_kylemcdonald_ofxCv__Alternative_approach_to_interfacing_with_OpenCv_from_openFrameworks_.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/GitHub_-_kylemcdonald_ofxCv__Alternative_approach_to_interfacing_with_OpenCv_from_openFrameworks_-300x89.png\" alt=\"\" width=\"300\" height=\"89\" class=\"alignnone size-medium wp-image-8059\" srcset=\"https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/GitHub_-_kylemcdonald_ofxCv__Alternative_approach_to_interfacing_with_OpenCv_from_openFrameworks_-300x89.png 300w, https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/GitHub_-_kylemcdonald_ofxCv__Alternative_approach_to_interfacing_with_OpenCv_from_openFrameworks_-768x229.png 768w, https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/GitHub_-_kylemcdonald_ofxCv__Alternative_approach_to_interfacing_with_OpenCv_from_openFrameworks_-565x168.png 565w, https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/GitHub_-_kylemcdonald_ofxCv__Alternative_approach_to_interfacing_with_OpenCv_from_openFrameworks_.png 1034w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\n&nbsp;<\/p>\n<p>\u300c<strong>ofxCv-master.zip<\/strong>\u300d\u304c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3055\u308c\u308b\u306e\u3067\u3001\u89e3\u51cd\u3057\u3066\u300c<strong>ofxCv<\/strong>\u300d\u3068\u3044\u3046\u30d5\u30a9\u30eb\u30c0\u540d\u306b\u3057\u307e\u3057\u3087\u3046\u3002<br \/>\n\u305d\u3057\u3066\u3001\u4ee5\u4e0b\u306e<strong>addons<\/strong>\u30d5\u30a9\u30eb\u30c0\u306b\u5165\u308c\u307e\u3059\u3002<\/p>\n<p><a href=\"http:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/ofxCv_\u3068_\u6295\u7a3f\u306e\u7de8\u96c6_\u2039_Yasushi_Noguchi_Class_\u2014_WordPress.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/ofxCv_\u3068_\u6295\u7a3f\u306e\u7de8\u96c6_\u2039_Yasushi_Noguchi_Class_\u2014_WordPress-300x146.png\" alt=\"\" width=\"300\" height=\"146\" class=\"alignnone size-medium wp-image-8063\" srcset=\"https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/ofxCv_\u3068_\u6295\u7a3f\u306e\u7de8\u96c6_\u2039_Yasushi_Noguchi_Class_\u2014_WordPress-300x146.png 300w, https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/ofxCv_\u3068_\u6295\u7a3f\u306e\u7de8\u96c6_\u2039_Yasushi_Noguchi_Class_\u2014_WordPress-768x374.png 768w, https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/ofxCv_\u3068_\u6295\u7a3f\u306e\u7de8\u96c6_\u2039_Yasushi_Noguchi_Class_\u2014_WordPress-565x275.png 565w, https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/ofxCv_\u3068_\u6295\u7a3f\u306e\u7de8\u96c6_\u2039_Yasushi_Noguchi_Class_\u2014_WordPress.png 865w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\n&nbsp;<\/p>\n<p>OF\u306eProjectGenerator\u3067\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u8a18\u5165\u3057\u3001<strong>ofxCV<\/strong>\u30a2\u30c9\u30aa\u30f3\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002\u6a19\u6e96\u306e\u30a2\u30c9\u30aa\u30f3\u3067\u3042\u308b<strong>ofxOpenCV<\/strong>\u3082\u4f7f\u3046\uff08\u540d\u79f0\u304c\u4f3c\u3066\u3044\u308b\uff09\u306e\u3067\u3001\u3053\u3061\u3089\u3082\u8aad\u307f\u8fbc\u3093\u3067\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><a href=\"http:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/2018_07_19_13_56.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/2018_07_19_13_56-233x300.png\" alt=\"\" width=\"233\" height=\"300\" class=\"alignnone size-medium wp-image-8062\" srcset=\"https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/2018_07_19_13_56-233x300.png 233w, https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/2018_07_19_13_56.png 500w\" sizes=\"auto, (max-width: 233px) 100vw, 233px\" \/><\/a><br \/>\n&nbsp;<\/p>\n<p>\u6b63\u3057\u304f\u8aad\u307f\u8fbc\u307e\u308c\u308b\u3068\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30b5\u30a4\u30c9\u30d0\u30fc\u306eaddons\u30d5\u30a9\u30eb\u30c0\u306b<strong>ofxCV<\/strong>\u3068<strong>ofxOpenCV<\/strong>\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n<p><a href=\"http:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/ofApp_h.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/ofApp_h.png\" alt=\"\" width=\"213\" height=\"270\" class=\"alignnone size-full wp-image-8065\" \/><\/a><br \/>\n&nbsp;<\/p>\n<h1>ofxCV\u306e\u30a8\u30d5\u30a7\u30af\u30c8\u3092\u4f7f\u3046<\/h1>\n<p>\u307e\u305a\u306f\u3001ofxCV\u306e\u6a5f\u80fd\u3092\u4f7f\u3063\u305f\u30a8\u30d5\u30a7\u30af\u30c8\u3092\u304b\u3051\u3066\u307f\u307e\u3057\u3087\u3046\u3002ofApp.h\u3067\u4ee5\u4e0b\u306e\u5909\u6570\u3092\u5ba3\u8a00\u3057\u307e\u3059\u3002ofxCv\u3092\u4f7f\u3046\u305f\u3081\u3001<strong>ofxCv.h<\/strong>\u3068<strong>ofxOpenCv.h<\/strong>\u306e\u4f7f\u7528\u3092\u5ba3\u8a00\u3059\u308b\u3053\u3068\u3092\u5fd8\u308c\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002<\/p>\n<h4>ofApp.h<\/h4>\n<pre lang=\"java\" line=\"1\">\r\n#pragma once\r\n\r\n#include \"ofxiOS.h\"\r\n#include \"ofxCv.h\"\r\n#include \"ofxOpenCv.h\"\r\n\r\nclass ofApp : public ofxiOSApp{\r\n\t\r\n    public:\r\n        \/*\u7701\u7565*\/\r\n    \r\n        ofVideoGrabber cam;     \/\/\u30ab\u30e1\u30e9\u7528\u5909\u6570\r\n    \r\n        \/\/\u5404\u7a2e\u30a8\u30d5\u30a7\u30af\u30c8\u7528\u5909\u6570\r\n        ofImage gray, blur, edge, comic, thresh, eroded, dilated;\r\n};\r\n<\/pre>\n<p>\u6b21\u306b\u3001setup()\u3001update()\u3001draw()\u3067\u30ab\u30e1\u30e9\u306e\u8a2d\u5b9a\u3084\u30a8\u30d5\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a\u3092\u304a\u3053\u306a\u3044\u307e\u3059\u3002<\/p>\n<h4>ofApp.mm<\/h4>\n<pre lang=\"java\" line=\"1\">\r\nusing namespace ofxCv;\r\n\r\n\/\/--------------------------------------------------------------\r\nvoid ofApp::setup(){\r\n    \r\n    \/\/\u30c7\u30d0\u30a4\u30b9\u306e\u5411\u304d\u3092\u7e26\u306b\u56fa\u5b9a\r\n    ofSetOrientation(OFXIOS_ORIENTATION_PORTRAIT);\r\n\r\n    \/\/\u30a4\u30f3\u30ab\u30e1\u30e9\u306fDeviceID(1)\r\n    cam.setDeviceID(1);\r\n    cam.setup(640, 480);\r\n    \r\n    \/\/\u30b3\u30df\u30c3\u30af\u98a8\u753b\u50cf\u306e\u30e1\u30e2\u30ea\u9818\u57df\u78ba\u4fdd\r\n    comic.allocate(cam.getWidth(), cam.getHeight(), OF_IMAGE_GRAYSCALE);\r\n}\r\n\r\n\/\/--------------------------------------------------------------\r\nvoid ofApp::update(){\r\n    \r\n    cam.update();   \/\/\u30ab\u30e1\u30e9\u306e\u6620\u50cf\u3092\u66f4\u65b0\r\n    \r\n    \/\/\u30ab\u30e1\u30e9\u6620\u50cf\u304c\u66f4\u65b0\u3055\u308c\u305f\u3089\r\n    if(cam.isFrameNew()) {\r\n\r\n        \/\/openCV\u306e\u6a5f\u80fd\u3092\u4f7f\u3063\u3066\u30a8\u30d5\u30a7\u30af\u30c8\u3092\u304b\u3051\u308b\r\n        \/\/Canny()\u306e\u5f15\u6570\u306b\u3064\u3044\u3066\u306f\u4ee5\u4e0b\u306e\u30ea\u30f3\u30af\u3092\u53c2\u7167\u306e\u3053\u3068\r\n        \/\/http:\/\/labs.eecs.tottori-u.ac.jp\/sd\/Member\/oyamada\/OpenCV\/html\/py_tutorials\/py_imgproc\/py_canny\/py_canny.html\r\n        \r\n        ofxCv::convertColor(cam, gray, CV_RGB2GRAY);\r\n        ofxCv::GaussianBlur(gray, blur, 5);\r\n        ofxCv::Canny(blur, edge, 20, 100);\r\n        ofxCv::threshold(cam, thresh, 100.0, false);\r\n        ofxCv::erode(cam, eroded, 5);\r\n        ofxCv::dilate(cam, dilated, 5);\r\n\r\n        gray.update();\r\n        blur.update();\r\n        edge.update();\r\n        thresh.update();\r\n        eroded.update();\r\n        dilated.update();\r\n\r\n        \/\/comic\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n        \/\/blur\u3068edge\u3092\u7d44\u307f\u5408\u308f\u305b\u3066comic\u306b\u3059\u308b\r\n        unsigned char *blurData = blur.getPixels().getData();\r\n        unsigned char *edgeData = edge.getPixels().getData();\r\n        unsigned char *comicData = comic.getPixels().getData();\r\n\r\n        for (int i = 0; i < cam.getWidth() * cam.getHeight(); i++) {\r\n            if (edgeData[i] == 0)\r\n                comicData[i] = (blurData[i] \/ 64) * 64 + 63;\r\n            else\r\n                comicData[i] = 0;\r\n        }\r\n        comic.update();\r\n    }\r\n}\r\n\r\n\/\/--------------------------------------------------------------\r\nvoid ofApp::draw(){\r\n    ofBackground(255, 255, 255);\r\n\r\n    ofPushMatrix();\r\n    ofSetColor(255);\r\n\r\n    \/\/\u753b\u9762\u3092\u93e1\u9762\u306b\u3059\u308b\r\n    ofTranslate(ofGetWidth(), 0);\r\n    ofScale(-1, 1);\r\n    \/\/\u30ad\u30e3\u30d7\u30c1\u30e3\u6620\u50cf\u3092\u753b\u9762\u306b\u5408\u308f\u305b\u3066\u62e1\u5927\r\n    float scale = ofGetWidth() \/ cam.getWidth();\r\n    ofScale(scale, scale);\r\n    \r\n    \/\/\u3053\u3053\u306e\u3007\u3007.draw()\u3092\u305d\u308c\u305e\u308c\u5b9f\u884c\u3057\u3066\u307f\u308b\r\n    if(cam.isFrameNew()) {\r\n        cam.draw(0, 0);\r\n        \/\/edge.draw(0, 0);\r\n        \/\/comic.draw(0, 0);\r\n        \/\/thresh.draw(0, 0);\r\n        \/\/eroded.draw(0, 0);\r\n        \/\/dilated.draw(0, 0);\r\n    }\r\n\r\n    ofPopMatrix();\r\n}\r\n<\/pre>\n<p>\u3069\u3046\u3067\u3057\u3087\u3046\u304b\u3002\u6bd4\u8f03\u7684\u77ed\u3044\u30b3\u30fc\u30c9\u3067\u30a8\u30d5\u30a7\u30af\u30c8\u3092\u304b\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001edge.draw()\u3092\u5b9f\u884c\u3057\u305f\u5834\u5408\u306b\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30a8\u30d5\u30a7\u30af\u30c8\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p><a href=\"http:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/IMG_0017.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/IMG_0017-225x300.png\" alt=\"\" width=\"225\" height=\"300\" class=\"alignnone size-medium wp-image-8073\" srcset=\"https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/IMG_0017-225x300.png 225w, https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/IMG_0017-768x1024.png 768w, https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/IMG_0017-565x753.png 565w, https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/IMG_0017.png 1536w\" sizes=\"auto, (max-width: 225px) 100vw, 225px\" \/><\/a><\/p>\n<h1>\u30d4\u30af\u30bb\u30eb\u3054\u3068\u306e\u8272\u3092\u629c\u304d\u51fa\u3057\u3066\u5909\u63db\u3059\u308b\u30a8\u30d5\u30a7\u30af\u30c8\u3092\u4f5c\u308b<\/h1>\n<p>\u6b21\u306b\u3001\u3082\u3046\u5c11\u3057\u81ea\u5206\u306a\u308a\u306e\u30a8\u30d5\u30a7\u30af\u30c8\u3092\u4f5c\u3063\u3066\u307f\u307e\u3059\u3002ofApp.h\u3067\u4ee5\u4e0b\u306e\u5909\u6570\u3092\u5ba3\u8a00\u3057\u307e\u3059\u3002<\/p>\n<h4>ofApp.h<\/h4>\n<pre lang=\"java\" line=\"1\">\r\nofTexture customColor;  \/\/\u30ab\u30b9\u30bf\u30e0\u8272\u753b\u50cf\u7528\u5909\u6570\r\nunsigned char * pix;    \/\/\u30ab\u30b9\u30bf\u30e0\u8272\u753b\u50cf\u306e\u30d4\u30af\u30bb\u30eb\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306e\u5909\u6570\r\n<\/pre>\n<p>ofApp.mm\u306esetup()\u306b\u4ee5\u4e0b\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<h4>setup() - ofApp.mm<\/h4>\n<pre lang=\"java\" line=\"1\">\r\n\/\/\u30ab\u30b9\u30bf\u30e0\u8272\u753b\u50cf\u306e\u30e1\u30e2\u30ea\u9818\u57df\u78ba\u4fdd\r\ncustomColor.allocate(cam.getWidth(), cam.getHeight(), GL_RGB);\r\n\/\/\u30ab\u30b9\u30bf\u30e0\u8272\u753b\u50cf\u306e\u30d4\u30af\u30bb\u30eb\uff08RGB\u306e3\u8272\u306a\u306e\u3067\u3001\u5e45x\u9ad8\u3055x3\u3068\u306a\u308b\uff09\r\npix = new unsigned char[ (int)( cam.getWidth() * cam.getHeight() * 3.0) ];\r\n<\/pre>\n<p>ofApp.mm\u306eupdate()\u306ecomic.update()\u306e\u5f8c\u306b\u4ee5\u4e0b\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002\u3053\u306e\u30b3\u30fc\u30c9\u306e\u4e2d\u306b\u306f\u69d8\u3005\u306a\u8272\u5909\u63db\u306e\u30b5\u30f3\u30d7\u30eb\u304c\u8a18\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u57fa\u672c\u7684\u306b\u306fRGB\u306e\u5024\u3092\u5909\u63db\u3057\u3066\u3044\u308b\u3060\u3051\u3067\u3059\u304c\u3001\u30a2\u30a4\u30c7\u30a2\u6b21\u7b2c\u3067\u7121\u9650\u306e\u30a8\u30d5\u30a7\u30af\u30c8\u3092\u8003\u6848\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n<h4>update() - ofApp.mm<\/h4>\n<pre lang=\"java\" line=\"1\">\r\n\/\/customColor\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\/\/\u30ab\u30b9\u30bf\u30e0\u8272\u753b\u50cf\r\nunsigned char * pixels = cam.getPixels().getData();    \/\/\u30ab\u30e1\u30e9\u753b\u50cf\u30c7\u30fc\u30bf\r\n\r\nint camW = cam.getWidth();    \/\/\u64ae\u5f71\u753b\u50cf\u306e\u5e45\u3001\u9ad8\u3055\r\nint camH = cam.getHeight();\r\n        \r\n\/\/1\u30d4\u30af\u30bb\u30eb\u305a\u3064\u53d6\u308a\u51fa\u3057\u3066\u3001r, g, b\u3092\u62bd\u51fa\r\nfor (int y = 0; y < camH; y ++){\r\n    for (int x = 0; x < camW; x ++){\r\n        \r\n        float r = pixels[y*camW*3 + x*3];    \/\/\u8d64\u3092\u62bd\u51fa\r\n        float g = pixels[y*camW*3 + x*3 + 1];    \/\/\u7dd1\u3092\u62bd\u51fa\r\n        float b = pixels[y*camW*3 + x*3 + 2];    \/\/\u9752\u3092\u62bd\u51fa\r\n\r\n        \/\/\u660e\u308b\u3055\u3001\u30b3\u30f3\u30c8\u30e9\u30b9\u30c8\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n        \/\/brightness = 0, contrast = 1.0\u3067\u901a\u5e38\u306e\u6620\u50cf\r\n        \/*\r\n        float brightness = 50;\r\n        float contrast = 0.5;\r\n\r\n        r = contrast*(r - 128) + 128 + brightness;\r\n        g = contrast*(g - 128) + 128 + brightness;\r\n        b = contrast*(b - 128) + 128 + brightness;\r\n        *\/\r\n        \/\/\u8272\u306e\u53cd\u8ee2\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n        \/*\r\n        r = 255 - r;\r\n        g = 255 - g;\r\n        b = 255 - b;\r\n        *\/\r\n        \/\/\u30bb\u30d4\u30a2\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n        \/*\r\n        r = (int)((float)r\/255*240);\r\n        g = (int)((float)g\/255*200);\r\n        b = (int)((float)b\/255*145);\r\n        *\/\r\n        \/\/2\u8272\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n        \/*\r\n        int brightness = (r + g + b)\/3;\r\n\r\n        if(brightness < 127){\r\n\r\n        r = 32;     \/\/\u8d64\r\n        g = 225;     \/\/\u7dd1\r\n        b = 0;     \/\/\u9752\r\n\r\n        }else if(brightness >=127){\r\n\r\n        r = 255;     \/\/\u8d64\r\n        g = 180;     \/\/\u7dd1\r\n        b = 0;     \/\/\u9752\r\n        }\r\n        *\/\r\n        \/\/3\u8272\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n        \/*\r\n        int brightness = (r + g + b)\/3;\r\n\r\n        if(brightness < 85){\r\n            r = 0;     \/\/\u8d64\r\n            g = 50;     \/\/\u7dd1\r\n            b = 0;     \/\/\u9752\r\n\r\n        }else if(brightness >=85 && brightness < 170){\r\n            r = 0;     \/\/\u8d64\r\n            g = 150;     \/\/\u7dd1\r\n            b = 255;     \/\/\u9752\r\n\r\n        }else if(brightness >= 170){\r\n            r = 255;     \/\/\u8d64\r\n            g = 100;     \/\/\u7dd1\r\n            b = 0;     \/\/\u9752\r\n        }\r\n        *\/\r\n        \r\n        \/\/\u5909\u63db\u5f8c\u306e\u5024\u3092pix\u306b\u4fdd\u5b58\r\n        pix[y*camW*3 + x*3] = ofClamp(r, 0, 255);   \/\/\u8d64\r\n        pix[y*camW*3 + x*3 + 1] = ofClamp(g, 0, 255);   \/\/\u7dd1\r\n        pix[y*camW*3 + x*3 + 2] = ofClamp(b, 0, 255);;   \/\/\u9752\r\n    }\r\n}\r\n\/\/customColor\u3092\u66f4\u65b0\r\ncustomColor.loadData(pix, cam.getWidth(), cam.getHeight(), GL_RGB);\r\n<\/pre>\n<p>\u6700\u5f8c\u306bdraw()\u5185\u3067customColor.draw()\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<h4>draw() - ofApp.mm<\/h4>\n<pre lang=\"java\" line=\"1\">\r\n\/\/\u3053\u3053\u306e\u3007\u3007.draw()\u3092\u305d\u308c\u305e\u308c\u5b9f\u884c\u3057\u3066\u307f\u308b\r\nif(cam.isFrameNew()) {\r\n    \/\/cam.draw(0, 0);\r\n    \/\/edge.draw(0, 0);\r\n    \/\/comic.draw(0, 0);\r\n    \/\/thresh.draw(0, 0);\r\n    \/\/eroded.draw(0, 0);\r\n    \/\/dilated.draw(0, 0);\r\n    customColor.draw(0, 0);\r\n}\r\n<\/pre>\n<p>\u8a66\u3057\u306b3\u8272\u306b\u3057\u3066\u307f\u307e\u3057\u305f\u3002<\/p>\n<p><a href=\"http:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/IMG_0018.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/IMG_0018-225x300.png\" alt=\"\" width=\"225\" height=\"300\" class=\"alignnone size-medium wp-image-8077\" srcset=\"https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/IMG_0018-225x300.png 225w, https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/IMG_0018-768x1024.png 768w, https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/IMG_0018-565x753.png 565w, https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/IMG_0018.png 1536w\" sizes=\"auto, (max-width: 225px) 100vw, 225px\" \/><\/a><\/p>\n<p>\u6700\u7d42\u7684\u306a\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306b\u306a\u308a\u307e\u3059\u3002<br \/>\n<a href=\"http:\/\/r-dimension.xsrv.jp\/classes_j\/wp-content\/uploads\/2018\/07\/myOpenCv.zip\">myOpenCv<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd1\u5e74\u3001Snow\u3084SnapChat\u306a\u3069\u306e\u81ea\u64ae\u308a\u30a2\u30d7\u30ea\u304c\u76db\u6cc1\u3067\u3059&#8230; <a href=\"https:\/\/r-dimension.xsrv.jp\/classes_j\/face_recognition_ios1\/\">Read more &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":8010,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,24],"tags":[],"class_list":["post-8056","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-media_third","category-openframeworks"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-json\/wp\/v2\/posts\/8056","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-json\/wp\/v2\/comments?post=8056"}],"version-history":[{"count":22,"href":"https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-json\/wp\/v2\/posts\/8056\/revisions"}],"predecessor-version":[{"id":8110,"href":"https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-json\/wp\/v2\/posts\/8056\/revisions\/8110"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-json\/wp\/v2\/media\/8010"}],"wp:attachment":[{"href":"https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-json\/wp\/v2\/media?parent=8056"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-json\/wp\/v2\/categories?post=8056"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/r-dimension.xsrv.jp\/classes_j\/wp-json\/wp\/v2\/tags?post=8056"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}